原代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,b[1001],op[201],x[201],y[201];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>b[i];
}
for(int i=1;i<=m;i++){
cin>>op[i]>>x[i]>>y[i];
}
for(int i=m;i>=1;i--){
if(op[i]==1){
b[x[i]]-=b[y[i]];
}
else{
b[x[i]]/=b[y[i]];
}
}
for(int i=1;i<=n;i++){
cout<<b[i]<<" ";
}
cout<<endl;
return 0;
}
这样由于捆绑测试会爆零。
但是加上x=y的特判之后:
#include<bits/stdc++.h>
using namespace std;
int n,m,b[1001],op[201],x[201],y[201];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>b[i];
}
for(int i=1;i<=m;i++){
cin>>op[i]>>x[i]>>y[i];
}
for(int i=m;i>=1;i--){
if(op[i]==1){
if(x[i]!=y[i]) b[x[i]]-=b[y[i]];
else b[x[i]]/=2;
}
else{
if(x[i]!=y[i]) b[x[i]]/=b[y[i]];
else b[x[i]]=sqrt(b[x[i]]);
}
}
for(int i=1;i<=n;i++){
cout<<b[i]<<" ";
}
cout<<endl;
return 0;
}
就会AC,但是不明白为什么要特判(只是因为题目中好像特别强调了一下x=y时的情况才加上特判的),而且为什么不特判就会错呢?求各位大佬解答