人尽皆知的YSuperman比赛今天又办了一轮
按照政治选择题中常见的错误选项
敢想敢做,无须顾忌太多
我不折不扣地执行了这一做法,毫不犹豫的在明知道一题都可能做不出来的情况下报名了YsOI……
结果发现B题貌似很容易,于是我就打了如下代码:
#include <bits/stdc++.h>
using namespace std;
#define MOD 998244353;
unsigned int arr[100050],n,m;
typedef struct {
int opt;
int n;
} opt;
vector<opt>opts[100050];
inline unsigned int read(){
char ch=getchar();
long long x=0,f=1;
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=getchar();
return x*f;
}
unsigned long long FEM(unsigned long long a1,unsigned long long b)
{
unsigned long long ans2=1;
while(b){
if(b&1)
ans2=(ans2*a1)%MOD;
a1=(a1*a1)%MOD;
b>>=1;
}
return ans2;
}
int main(void) {
cin>>n>>m;
for(int i=1;i<=n;i++) arr[i] = read();
for(int i=0;i<m;i++) {
int op = read();
if(op == 1) {
int l=read(),r=read(),x=read();
for(int i=l;i<=r;i++) {
opt op = {1,x};
opts[i].push_back(op);
}
}
else if(op == 2) {
int l=read(),r=read(),y=read();
bool skp = ((y>=l)&&(y<=r));
for(int i=l;i<=r;i++) {
if(i==y) continue;
opt op = {2,y};
opts[i].push_back(op);
}
if(skp) {
opt op = {2,y};
opts[y].push_back(op);
}
}
else {
int z=read(),sz=opts[z].size();
opt ops;
for(int i=0;i<sz;i++) {
ops = opts[z][i];
if(ops.opt == 1) {
arr[z] = FEM(arr[z],ops.n);
}
else arr[z] = (arr[z] * arr[ops.n]) %MOD;
printf("%d\n",arr[z]);
opts[z].clear();
}
}
}
return 0;
}
看起来很对啊?于是我就提交了……结果
我没(M)了(LE),想打离散化到现在都没打出来……
请各位神犇帮蒟蒻看看到底错在了哪里?