把变量改成数组就过了为什么?
查看原帖
把变量改成数组就过了为什么?
908638
chair0114楼主2023/7/14 10:14

rt

以下是源代码(改之前)

subtask 45

#include<iostream>
#include<algorithm>
#define ll long long 
#define ii int
using namespace std;
const ii MAXN=1e5+11;
ii n,m,a[MAXN],b,ss,c,j;
string s[MAXN],ans;
bool f[MAXN];
int main(){
	cin>>n>>m;
	for(ii i=0;i<n;++i){	
		cin>>b>>s[j];
		if(b==0)
		    f[j]=1;
			++j; 
	}
	j=0;
	for(ii i=0;i<m;++i){
		cin>>c>>ss; 
		if(c==0){
			if(!f[j]){//外 左 
				if(j+ss>=n){
					j=j+ss-n;
				}
				else
				j+=ss;
			}
			else if(f[j]){//内 左 
				if(j-ss<=0){ 
					j=n-ss+j;
					}
				else
					j-=ss;
			}
		}
		else if(c==1){ 
			if(!f[j]){//外 右
				if(j-ss<=0){ 
					j=n-ss+j;
					}
				else
					j-=ss;
				}
			else if(f[j]){//内 右 
				if(j+ss>=n){
					j=j+ss-n;
				}
				else
				j+=ss;
			}
		}
	}
	cout<<s[j];
	return 0;
} 

改之后AC

#include<iostream>
#include<algorithm>
#define ll long long 
#define ii int
using namespace std;
const ii MAXN=1e5+11;
ii n,m,a[MAXN],b,ss[MAXN],c,j;
string s[MAXN],ans;
bool f[MAXN];
int main(){
	cin>>n>>m;
	for(ii i=0;i<n;++i){
		++j;
		cin>>b>>s[j];
		if(b==0)
		    f[j]=1;
	}
	j=0;
	for(ii i=0;i<m;++i){
		cin>>c>>ss[i]; 
		if(c==0){
			if(!f[j]){//外 左 
				if(j+ss[i]>n){
					j=j+ss[i]-n;
				}
				else
				j+=ss[i];
			}
			else if(f[j]){//内 左 
				if(j-ss[i]<=0){ 
					j=n-ss[i]+j;
					}
				else
					j-=ss[i];
			}
		}
		else if(c==1){ 
			if(!f[j]){//外 右
				if(j-ss[i]<=0){ 
					j=n-ss[i]+j;
					}
				else
					j-=ss[i];
				}
			else if(f[j]){//内 右 
				if(j+ss[i]>n){
					j=j+ss[i]-n;
				}
				else
				j+=ss[i];
			}
		}
	}
	cout<<s[j];
	return 0;
} 

真的很离谱

2023/7/14 10:14
加载中...