前言:
谢谢 养鸡大户 帮我调 \(T1\) 的代码。
谢谢 小青蛙 给我讲解 \(T2\) 。
T1:公约数神庙(gcd)
思路:
其实大体思路不是很难,但是特判的情况真的好多啊。能在赛时水水的大数据下想到所有特判情况的大佬真的存在吗???
显然从头到尾大体分为两类,直达的和中转的。
直达的好说,判一下首位两个数有无共同的质因数就好。
然后就考虑中转的。遍历首尾之间的点,如果守点能到该点,则相当于该点的质因数也是首点的质因数。或许较为抽象,可以手模一下:

显然 \(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.



song1
嘲笑谁恃美扬威 没了心如何相配
盘铃声清脆 帷幕间灯火幽微
我和你 最天生一对
没了你才算原罪 没了心才好相配
你褴褛我彩绘 并肩行过山与水
你憔悴 我替你明媚
是你吻开笔墨 染我眼角珠泪
演离合相遇悲喜为谁
他们迂回误会 我却只由你支配
问世间哪有更完美
兰花指捻红尘似水
三尺红台 万事入歌吹
唱别久悲不成悲 十分红处竟成灰
愿谁记得谁 最好的年岁
银临:你一牵我舞如飞 你一引我懂进退
苦乐都跟随 举手投足不违背
将谦卑 温柔成绝对
你错我不肯对 你懵懂我蒙昧
心火怎甘心扬汤止沸
你枯我不曾萎 你倦我也不敢累
用什么暖你一千岁
风雪依稀秋白发尾
灯火葳蕤 揉皱你眼眉
假如你舍一滴泪 假如老去我能陪
烟波里成灰 也去得完美
风雪依稀秋白发尾
灯火葳蕤 揉皱你眼眉
假如你舍一滴泪 假如老去我能陪
烟波里成灰 也去得完美
song2
森林音乐会 现在时间到
太阳睁开眼 公鸡吹起号
松鼠百灵鸟 排队不打闹
狮子老虎 一起蹦蹦跳
乌龟和兔子 远方正赛跑
背上小书包 我要去学校
现在就出发 和世界拥抱
跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到
小羊低下头 小草土里冒
狗狗在奔跑 小猫喵喵叫
猴子手拉手 不急也不躁
跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 跟我一起
蹦蹦 跳跳 阳光在照耀
蹦蹦 跳跳 我们没烦恼
蹦蹦 跳跳 从不睡懒觉
好事要来到 要来到