求助
查看原帖
求助
399457
蜗牛与飞猪楼主2023/9/23 14:55

没搞懂这俩代码的差别

我的代码:

#include<bits/stdc++.h>
using namespace std;

int n;
struct data{
	long long d,ch; 
}a[200005];

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i].d;
	int t,change=0;
	cin>>t;
	while(t--)
	{
		int op,x,k;
		cin>>op>>x;
		
		if(op==1)change=x;
		if(a[x].ch!=change)
		{
			a[x].ch=change;
			a[x].d=change;
		}
		if(op==2)
		{
			cin>>k;
			a[x].d+=k;
		}
		if(op==3)cout<<a[x].d<<endl;
	}
	
	
	return 0;
}

会RE

换一下位置后就AC了

#include<bits/stdc++.h>
using namespace std;

int n;
struct data{
	long long d,ch;    //ch为是否已经进行了op1 
}a[2000005];

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i].d;
	int t,change=0;
	
	cin>>t;
	while(t--)
	{
		int op,x,k;
		cin>>op>>x;
		
		if(op==1)change=x;
		if(op==2)
		{
			cin>>k;
			if(a[x].ch!=change)
			{
				a[x].ch=change;
				a[x].d=change+k;
			}
			else a[x].d+=k;
		}
		if(op==3)
		{
			if(a[x].ch!=change)
			{
				a[x].ch=change;
				a[x].d=change;
			}
			cout<<a[x].d<<endl;
		}
	}
	
	
	return 0;
}

2023/9/23 14:55
加载中...