说好了暴力能过呢
查看原帖
说好了暴力能过呢
685641
yyds233333楼主2023/7/15 18:08

rt,代码如下:

#include<bits/stdc++.h>
using namespace std;
bool a[3005],b[3005],c[3005],sss = 1;  //定义三个bool数组,a,b,c分别代表初始输入的、反转用的、贮存字典序最小的
string s;
int p;
int main(){
  	cin>>s;  // 先输入进字符串
  	int q = s.size();
  	for(int i = 0;i<q;i++){  //再遍历输进a,初始化c
  		a[i] = s[i];
		c[i] = a[i];	
	}
	for(int i = 0;i<q;i++){  //找出第一个‘1’,标记一下
		if(a[i]){
			p = i;
			break ;		
		}
	}
	for(int i = p;i<q;i++){   //从p开始遍历
		if(a[i]){     //如果是‘1’,就开始遍历
			for(int j = 0;j<q;j++){  //初始化b
				b[i] = a[i];
			}
			sss = 1;     //初始化s,用来判断字典序是否更小
			for(int j = i;j<(q-i)/2;j++){
				for(int k = 0;k<q;k++){
					if(b[k] == c[k]){
						continue ;
					}else if((b[k]>c[k] && k<i) || (-b[k]>c[k] && k<=j && k>=i)){
						sss = 0;  //若b的字典序高于c,则退出循环并将sss置为0
						break;
					}else{
						continue;
					}
				}
				if(sss){
					for(int k = 0;k<q;k++){   //将b赋值进c
						if(k<i) c[i] = b[i];
						else c[i] = -b[i];
					}
				}
			}
		}
	}
	for(int i = 0;i<q;i++){  //输出
		cout<<c[i];
	}
	return 0;
}

不知道为啥会WA,还有几个点TLE,是不是循环太多了?

2023/7/15 18:08
加载中...