%%%大佬,交换功能无法实现,求解!
查看原帖
%%%大佬,交换功能无法实现,求解!
640477
biophitma_wby楼主2024/8/8 21:29

对于数据“db,bc”总是判断前者为“1”,原因是代码中只判断是否有小于当先字符的,并未考虑交换后字典数,但自己无法解决,求解谢谢%%%

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Word{
	char str[3010];
	int character[26+1];
}w[3010];
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		cin>>w[i].str;cin.get();
		for(int j=0;j<m;j++){
			w[i].character[w[i].str[j]-'a'+1]++;
		}
	}/*
	for(int i=1;i<=26;i++){
		printf("%c ",char('a'+i-1));
	}
	printf("\n");
	for(int i=1;i<=n;i++){
		for(int j=1;j<=26;j++){
			printf("%d ",w[i].character[j]);
		}
		printf("\n");
	}*/
	/*
	a b a n d o n
	b a n a n a a
	b a a n n a a
	n o t n o t n 
	
	 a a b b c c a
	 a a b b c c c 
	就是说要保留原始数据 
	*/
	//最坏时间复杂度Θ(3000^3),wi为长度为m的小写字母字符串且两两不同。
	for(int i=1;i<=n;i++){
		bool isTure=true;
		int character_temp[26+1];
		for(int j=1;j<=n;j++){
			if(j==i)continue;
			//对i重新赋值 
			for(int k=1;k<=26;k++){
				character_temp[k]=w[i].character[k];
			}
			//从第0项开始查找 
			int x=0,y=0;
			while(isTure==true){
				int xx=w[i].str[x]-'a';
				int yy=w[j].str[y]-'a';
				if(xx<yy){//如果字典数小直接退出
					break;
				}else{//如果不小于,则寻找字典数<=的 
					bool isTure_temp=false;//
					for(int l=1;l<yy;l++){//先寻找字典数<的 
						if(character_temp[l]){//如果找到则退出 
							isTure_temp=true;
							break;
						}
					}
					if(isTure_temp==true){
						break;
					}else{
						if(character_temp[yy]>0){
							character_temp[yy]--;
						}else{
							isTure=false;
							break; 
						}
					}
				}
				x++,y++;//针对相等的情况来说 
			}
			if(isTure==false)break;
		}
		if(isTure==false)printf("0");
		else printf("1");
	}
	return 0;
} 
2024/8/8 21:29
加载中...