『JROI-4』淘气的猴子

题面

image

image

思路

这道题其实是一个暴力模拟题。

首先对于 \(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;
}
posted @ 2022-05-01 15:49  蒟蒻xiezheyuan  阅读(49)  评论(0编辑  收藏  举报