当前位置: 首页 > 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.hn-smt.com/news/460/

相关文章:

  • P14322 「ALFR Round 11」E 空崎ヒナ 题解 (markdown)
  • [题解]P7074 [CSP-J 2020] 方格取数
  • 二分查找边界
  • P3232 [HNOI2013] 游走
  • 软件工程学习日志2025.10.27
  • 深入解析:TCP/IP 四层模型协作流程详解
  • Windows全版本激活教程(仅供测试)
  • 10月27日
  • javascript构造对象数组向服务器端传输
  • 10.25 CSP-S 模拟赛
  • 鲜花10/27
  • 读《程序员的修炼之路:从小工到专家》有感
  • 想让默认头像不再千篇一律,就顺手复刻了一下 GitHub 的思路
  • java(3)基础规范
  • 读书日记3
  • Tuack 生成 OI 比赛题目 PDF 笔记
  • 数据库三大范式、Union和Union all的区别
  • CSP-S2025 游记
  • 「LG3600-随机数生成器」题解
  • MathType7下载包安装教程2025最新下载+安装+汉化激活(附安装包,超详细)
  • 2025强网杯ezphp复现
  • 漏洞报告被拒绝的常见原因及避免方法
  • 【IEEE出版 | 重庆邮电大学主办 | 多届次、高层次】第六届人工智能与计算机工程国际学术会议(ICAICE 2025)
  • Docker容器里面部署的Jenkins的Java17升级到21版本(无需删除之前容器,内部在线升级) - 攻城狮
  • 报表知识
  • 渐进过程中大O与小o混用
  • 消息队列的有序性
  • 【LTDC】DMA2D —— 嵌入式系统的 GPU
  • unity管理器设计:Manager of Managers
  • iview table 排序 columns 里面写 sortable: custom 不要写 sortable: true 不然会进行二次内部排序序号等 字段。