第2个测试点TLE,90分求助
查看原帖
第2个测试点TLE,90分求助
942220
cyyzliangyuhan楼主2024/1/26 21:04
#include<bits/stdc++.h>
using namespace std;
int n;
int xingzhi(string s){
	int ans=0;
	for(int i=0;i<s.size();i++){
		if(s[i]=='1'){
			ans+=i+1;
		}
	}
	return ans;
}
void f1(string s,int ans){
    for(int i=0;i<s.size();i++){
        if(s[i]=='1'){
        	if(ans-(i+1)==0||(ans-(i+1))%(n+1)==0){
        		s[i]='0';
        		cout<<s<<endl;
        		return;
			}
		}	
	}	
	cout<<-1<<endl;
}
void f2(string s){
	for(int i=0;i<=s.size();i++){
		string s1="";
		if(i==0){
			s1=s1+"0"+s;
		}else if(i==s.size()){
			s1=s1+s+"0";
		}else{
			s1=s1+s.substr(0,i)+"0"+s.substr(i);
		}
		int ans=xingzhi(s1);
		if(ans==0||ans%(n+1)==0){
			cout<<s1<<endl;
			return;
		}
	}
	for(int i=0;i<=s.size();i++){
		string s1="";
		if(i==0){
			s1=s1+"1"+s;
		}else if(i==s.size()){
			s1=s1+s+"1";
		}else{
			s1=s1+s.substr(0,i)+"1"+s.substr(i);
		}
		int ans=xingzhi(s1);
		if(ans==0||ans%(n+1)==0){
			cout<<s1<<endl;
			return;
		}
	}
	cout<<-1<<endl;
	return;
}
void f3(string s){	
	for(int i=0;i<s.size();i++){
		string s1;
		if(i==0){
			s1=s.substr(1);
		}else if(i==s.size()-1){
			s1=s.substr(0,s.size()-1);
		}else{
			s1=s.substr(0,i)+s.substr(i+1);
		}
		int ans=xingzhi(s1);
		if(ans==0||ans%(n+1)==0){
			cout<<s1<<endl;
			return;
		}
	}
	cout<<-1<<endl;
	return;
}
int main(){
	cin>>n;
	string s;
	while(cin>>s){
		if(s.size()==n){
			int ans=xingzhi(s);
			if(ans==0||ans%(n+1)==0){
				cout<<s<<endl;
				continue;
			}else{
				f1(s,ans);
				continue;
			}
		}else if(s.size()<n){
			f2(s);
		}else{
			f3(s);
		}
	}
	return 0;
}
2024/1/26 21:04
加载中...