60pts求查,有注释
查看原帖
60pts求查,有注释
144828
CyberDragoon楼主2024/8/19 15:08

RT

#include<bits/stdc++.h>
using namespace std;
string c;
int l,n,sum;
bool isok;
bool check(){				//检查是否符合条件 
	if(l!=n) 
		return false;
	sum=0;
	for(int i=0;i<l;i++)
		if(c[i]=='1')
			sum+=i+1;
	return (sum==0||sum%(n+1)==0)?true:false;
}
void f1(){							//操作1 
	sum=0;
	for(int i=0;i<l;i++)			//计算位置号的和 
		if(c[i]=='1')
			sum+=i+1;
	for(int i=0;i<l;i++){			//替换1为0 
		if(c[i]=='1'&&(sum-i-1)%(n+1)==0){
			c[i]='0';
			cout<<c;
			return;
		}
	}
	isok=false;						//标记不存在答案 
	return;
}
void f2(){							//操作2 
	int sum=0,fl=0,bs=0;
	for(int i=0;i<l;i++)			//计算位置号的和 
		if(c[i]=='1')
			sum+=i+1,bs++;			//记录1的数目 
	fl=bs;
	for(int i=0;i<l;i++){			//在第i个元素前填入0 
		if((sum+fl)%(n+1)==0){
			for(int j=0;j<i;j++)
				cout<<c[j];
			cout<<'0';
			for(int j=i;j<n;j++)
				cout<<c[j];
			return;
		}
		if(c[i]=='1')fl--;			//除去不受影响的1 
	}
	if(sum==0||sum%(n+1)==0){		//特判需在最后填0 
		cout<<c<<'0';
		return;
	}
	fl=bs;
	for(int i=0;i<l;i++){			//在第i个元素前填入1
		if((sum+fl+i+1)%(n+1)==0){
			for(int j=0;j<i;j++)
				cout<<c[j];
			cout<<'1';
			for(int j=i;j<l;j++)
				cout<<c[j];
			return;
		}
		if(c[i]=='1')fl--;			//除去不受影响的1 
	}
	if(sum==0||(sum+l)%(n+1)==0){	//特判需在最后填1 
		cout<<c<<'1';
		return;
	}
	isok=false;						//标记不存在答案 
	return;
}
void f3(){							//操作3 
	int sum=0,fl=0;
	for(int i=0;i<l;i++)			//计算位置号的和 
		if(c[i]=='1')
			sum+=i+1,fl++;			//记录1的数目 
	for(int i=0;i<l;i++){			//除去第i个元素 
		if(c[i]=='1'){				//除去1 
			fl--;
			if((sum-i-1-fl)%(n+1)==0){
				for(int j=0;j<i;j++)
					cout<<c[j];
				for(int j=i+1;j<l;j++)
					cout<<c[j];
				return;
			}
		}else{						//除去0 
			if((sum-fl)%(n+1)==0){
				for(int j=0;j<i;j++)
					cout<<c[j];
				for(int j=i+1;j<l;j++)
					cout<<c[j];
				return;
			}
		}
	}
	isok=false;						//标记不存在答案 
	return;
}
int main(){
	//freopen("a.in","r",stdin);
	cin>>n;
	while(cin>>c){
		isok=true;					//标记变量初始化 
		l=c.length();
		if(!check()){				//根据长度判断操作种类 
			if(l==n) f1();
			else if(l==n-1) f2();
			else if(l==n+1) f3();
			else cout<<-1;
			if(!isok)cout<<-1;		//没答案输出-1 
		}else cout<<c;				//符合条件直接输出 
		cout<<endl;
	}
	return 0;
} 
2024/8/19 15:08
加载中...