『JROI-4』淘气的猴子
题面
思路
这道题其实是一个暴力模拟题。
首先对于 \(1\) 操作,我们直接 \(b_x = b_x - b_y\)。
对于 \(2\) 操作,我们直接 \(b_x = b_x \times b_y\)。
如果真这样写,可能只有 \(50\) 分。
如果看看题目,可以发现有这样一句话:
特别且显然地,当 \(x=y\),新的 \(x\) 就等于原来的 \(x\) 的两倍或平方。
所以,我们要特判一下 \(x=y\)。
代码:
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
double b[1005];
struct{
int op,x,y;
} qs[1005];
int n,m;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>b[i];
}
for(int i=1;i<=m;i++){
cin>>qs[i].op>>qs[i].x>>qs[i].y;
}
for(int i=m;i>=1;i--){
int op=qs[i].op,x=qs[i].x,y=qs[i].y;
if(x==y&&op==1){
b[x]/=2;
}
else if(x==y&&op==2){
b[x]=sqrt(b[x]);
}
else if(op==1){
b[x]-=b[y];
}
else{
b[x]/=b[y];
}
}
for(int i=1;i<=n;i++){
printf("%.0lf ",round(b[i]));
}
putchar('\n');
return 0;
}