当前位置: 首页 > news >正文

CSP-S模拟40

前言:

谢谢 养鸡大户 帮我调 \(T1\) 的代码。

谢谢 小青蛙 给我讲解 \(T2\)

T1:公约数神庙(gcd)

思路:

其实大体思路不是很难,但是特判的情况真的好多啊。能在赛时水水的大数据下想到所有特判情况的大佬真的存在吗???

显然从头到尾大体分为两类,直达的和中转的。

直达的好说,判一下首位两个数有无共同的质因数就好。

然后就考虑中转的。遍历首尾之间的点,如果守点能到该点,则相当于该点的质因数也是首点的质因数。或许较为抽象,可以手模一下:

image

显然 \(2\)\(6\) 的连接是合法的。那么 \(2\) 从此以后能通过 \(6\) 到达所有含有质因数 \(3\) 的数,在某种意义上相当于 \(2\) 有了质因数 \(3\)

因为 \(1000\) 内有 \(168\) 个质因数,所以我们可以用 \(bitset\) 预处理出每个数含有哪个质因数。

若两个数的 \(gcd\) 大于 \(1\) ,即 \(bitset\) 按位与后有 \(1\)

中转点可以视为按位或操作。

代码:

$code$
#include<iostream>
#include<bitset> 
using namespace std;
const int N=1e5+5;
int n,m,p,q,cnt,a[N],pri[200];
bool vis[N];
bitset<200> s[N];
inline void init(){for(int i=2;i<=1005;i++){if(!vis[i]) pri[++cnt]=i;for(int j=i*2;j<=1005;j+=i) vis[j]=1;}
}
int main(){freopen("gcd.in","r",stdin);freopen("gcd.out","w",stdout);ios::sync_with_stdio(false);init();cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];int tmp=a[i];for(int j=1;j<=cnt&&pri[j]<=tmp;j++){if(tmp%pri[j]==0){s[i][j]=1;while(tmp%pri[j]==0) tmp/=pri[j];}}}while(m--){cin>>p>>q;//特判 if(p==q){//相等 cout<<"Shi"<<'\n';continue;}if(a[p]==1||a[q]==1){//有一肯定不行呀 cout<<"Fou"<<'\n';continue;}if((a[p]&&!a[q])||(!a[p]&&a[q])){//0跟任何数的gcd都是原数 cout<<"Shi"<<'\n';continue;}if(!a[p]&&!a[q]){//首尾都是0 bool f=0;for(int i=p+1;i<q;i++){if(a[i]>1){//你猜为什么我调了1 hour f=1;cout<<"Shi"<<'\n';break;}}if(!f) cout<<"Fou"<<'\n';continue;}if(a[p]==a[q]&&a[p]&&a[q]){//相等一定可以 cout<<"Shi"<<'\n';continue;}//直达: if((s[p]&s[q]).count()){cout<<"Shi"<<'\n';continue;}//中转:bool f=0;for(int i=p+1;i<q;i++){if(!a[i]){f=1;cout<<"Shi"<<'\n';break;}}if(f) continue;bitset<200> w=s[p];for(int i=p+1;i<q;i++) if((w&s[i]).count()) w=w|s[i];//中转站 if((w&s[q]).count()) cout<<"Shi"<<'\n';else cout<<"Fou"<<'\n';}return 0;
}

T2:栈法师(sort)

思路:

显然我们最多最多只需要两个栈。无论你想要什么,只要把目前看来有点碍事的家伙移到另一个栈就好啦。

所以我们只需要判断一下一个栈能否搞定,不能的话就是两个栈喽

对于一个栈的情况:

我们先将 \(a\) 序列里的东西全部压入栈中,然后碰到我们想要的就弹出。

如果我们想要的在栈的下面,那么很显然一个栈就无法完成操作了。

对于两个栈的情况:

其实就是我们把上面提到的目前看起来有些碍事的家伙移到中转栈里去。

操作数就是它的原始位置的前面的大于它的数,用树状数组维护一下就可以了。

代码:

$code$
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stack> 
#define lowbit(x) x&(-x)
using namespace std;
const int N=1e5+5;
int T,n,a[N],tr[N],pos[N];
struct flower{int val,num;bool operator < (const flower &css)const{if(val!=css.val) return val<css.val;else return num<css.num;}
}b[N];
stack<int> s;
vector<int> ans;
inline void add(int x,int val){while(x<=n){tr[x]+=val;x+=lowbit(x);}
}
inline int query(int x){int ans=0;while(x){ans+=tr[x];x-=lowbit(x);}return ans;
}
inline bool check(){ans.clear();while(!s.empty()) s.pop();int now=n;for(int i=1;i<=n;i++){while((s.empty()||s.top()!=b[i].val)&&now){s.push(a[now--]);ans.push_back(1);}if(s.top()==b[i].val){ans.push_back(0);s.pop(); }else return 0;}return 1;
}
inline void work(){ans.clear();while(!s.empty()) s.pop();for(int i=1;i<=n;i++) pos[i]=n-b[i].num+1;for(int i=1;i<=n;i++) add(i,1);int c=n;for(int i=1;i<=n;i++){int d=query(pos[i])-query(c);if(d) ans.push_back(d);ans.push_back(0);add(pos[i],-1);c=pos[i];}cout<<2<<'\n';cout<<ans.size()+1<<'\n';cout<<"1 1 "<<n<<'\n';for(int op:ans){if(op>0) cout<<"3 2 1 "<<op<<'\n';if(op<0) cout<<"3 1 2 "<<-op<<'\n';if(!op) cout<<"2 1"<<'\n';}
}
int main(){freopen("sort.in","r",stdin); freopen("sort.out","w",stdout);ios::sync_with_stdio(false);cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];b[i]=(flower){a[i],i};}sort(b+1,b+1+n);if(check()){cout<<1<<'\n';cout<<ans.size()<<'\n';for(auto op:ans){if(op) cout<<"1 1 1"<<'\n';else cout<<"2 1"<<'\n';}}else work();}return 0;
}

T3、T4还不会呀

后言:

The puppy is divine.

t_251027134622_OIP-C

t_251027134627_OIP-C (1)

t_251027134631_OIP-C (2)

song1

嘲笑谁恃美扬威 没了心如何相配
盘铃声清脆 帷幕间灯火幽微
我和你 最天生一对
没了你才算原罪 没了心才好相配
你褴褛我彩绘 并肩行过山与水
你憔悴 我替你明媚
是你吻开笔墨 染我眼角珠泪
演离合相遇悲喜为谁
他们迂回误会 我却只由你支配
问世间哪有更完美
兰花指捻红尘似水
三尺红台 万事入歌吹
唱别久悲不成悲 十分红处竟成灰
愿谁记得谁 最好的年岁
银临:你一牵我舞如飞 你一引我懂进退
苦乐都跟随 举手投足不违背
将谦卑 温柔成绝对
你错我不肯对 你懵懂我蒙昧
心火怎甘心扬汤止沸
你枯我不曾萎 你倦我也不敢累
用什么暖你一千岁
风雪依稀秋白发尾
灯火葳蕤 揉皱你眼眉
假如你舍一滴泪 假如老去我能陪
烟波里成灰 也去得完美
风雪依稀秋白发尾
灯火葳蕤 揉皱你眼眉
假如你舍一滴泪 假如老去我能陪
烟波里成灰 也去得完美

song2

森林音乐会 现在时间到
太阳睁开眼 公鸡吹起号
松鼠百灵鸟 排队不打闹
狮子老虎 一起蹦蹦跳
乌龟和兔子 远方正赛跑
背上小书包 我要去学校
现在就出发 和世界拥抱
跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到
小羊低下头 小草土里冒
狗狗在奔跑 小猫喵喵叫
猴子手拉手 不急也不躁
跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 要来到

http://www.jsqmd.com/news/23989/

相关文章:

  • CF1608F MEX counting 题解
  • [题解]P7914 [CSP-S 2021] 括号序列
  • Windows11安装miniconda
  • 【中份薯条】雷柏MT760鼠标上手改装
  • 102302116 田自豪 作业1
  • 实验二:现代C++编程初体验
  • 公众号排版神器:2025年最新顶级AI排版软件索引指南
  • 第四篇:docker底层原理
  • 【中份薯条】雷柏MT760上手改装
  • 软件测试和DevOps的关系
  • PyPDF无限循环漏洞CVE-2025-62707技术分析
  • 重组蛋白技术概述
  • 题解:luogu P4948 数列求和
  • 关于springboot+Servlet报错404的问题
  • 10.27 CSP-S模拟40 改题记录
  • Codechef Painting Tree 题解 [ 蓝 ] [ 树形 DP ] [ 概率期望 ] [ 分类讨论 ]
  • Linux运行命令三种方式对比
  • P14322 「ALFR Round 11」E 空崎ヒナ 题解 (markdown)
  • 详细介绍:论文阅读 (1) :Control Flow Management in Modern GPUs
  • 公众号排版2025年权威推荐:揭秘有一云AI编辑器为何高效?
  • P14322 「ALFR Round 11」E 空崎ヒナ 题解
  • [题解]P7074 [CSP-J 2020] 方格取数
  • 昨天线下赛的复盘
  • 10 27
  • 同余最短路学习报告
  • 打包exe出错了:
  • 19 lambda表达式的简化过程
  • 详细介绍:Redis多租户资源隔离方案:基于ACL的权限控制与管理
  • 二分查找边界
  • 求解 LCA 的三种方法及其比较