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

相关文章:

  • 第四篇:docker底层原理
  • 关于springboot+Servlet报错404的问题
  • Codechef Painting Tree 题解 [ 蓝 ] [ 树形 DP ] [ 概率期望 ] [ 分类讨论 ]
  • 【CI130x 离在线】如何运行 curl 脚本
  • 这才是真正的AI NAS!极空间私有云Z2Ultra评测
  • 新东方第三节课名言作文
  • 十月阅读_3
  • 中考_体育
  • 常见问题处理 --- phpstudy启动mysql失败
  • 20232308 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 【密码学实战】openHiTLS PKCS12命令行程序: PKCS12文件生成与解析
  • 「CTSC2017-游戏」题解
  • vue3 vue3-form-element表单生成工具 输入框增加后缀
  • 20232402 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 掘金2025年:数字化商业浪潮下,如何选对平台与伙伴?一站式多商户商城系统推荐榜发布,多商户商城代理招募/多商户项目合伙人加盟/一站式开店代理项目加盟
  • 为医疗器械行业搭建“数字桥梁”,破解协同效率与合规难题
  • PostgreSQL 服务版
  • 20232307 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 2025年10月办公家具公司评价榜:基于真实数据的权威推荐清单
  • vue+antv/x6项目使用问题
  • 《程序员修炼之道:从小工到专家》前五分之一观后感
  • 坐标系与投影关系
  • 用gdb的动态视角看ret2text的实现
  • 1027随笔
  • ask_skill
  • SVN 主分支合并之通过主分支合并子分支执行流程
  • 现代c++编程体验2
  • 化繁为简:解密国标GB28181算法算力平台EasyGBS如何以兼容性与易用性赋能安防集成
  • 计算机毕业设计springboot音乐畅听系统 基于Spring Boot框架的智能音乐播放系统编写 Spring Boot驱动的音乐在线欣赏平台构建
  • vue2 封装组件使用 v-mode【el-radio,el-input】