RE爆零求助
查看原帖
RE爆零求助
585704
TSL_ClearLightDream楼主2024/11/27 12:51
#include <bits/stdc++.h>
using namespace std;
int n,len[25],m=0,cnt[25][155][155],pre[25][155][155];
string a[25][155],b[105];
int main()
{
//	freopen("abbr.in","r",stdin);
//	freopen("abbr.out","w",stdout);
	cin>>n;
	for (int i=1;i<=n;i++){
		cin>>b[i];
	}
	char c=getchar();
	for (int i=1;1;i++){
		c='0';
		len[i]++;
		while (c!='\n'){
			bool flag=1;
			cin>>a[i][len[i]];
			for (int j=1;j<=n;j++){
				if (a[i][len[i]]==b[j]){
					flag=0;
					break;
				}
			}
			len[i]+=flag;
			c=getchar();
		}
		if (a[i][1]=="LAST" && a[i][2]=="CASE"){
			break;
		}
		len[i]--;
		m++;
	}
	for (int i=1;i<=m;i++){
		if ((int)a[i][1].size()-1>len[i]){
			continue;
		}
		for (int k=0;k<(int)a[i][1].size();k++){
			a[i][1][k]=a[i][1][k]+'a'-'A';
			for (int j=2;j<=len[i];j++){
				int ls=0;
				for (int s=0;s<(int)a[i][j].size();s++){
					if (a[i][j][s]==a[i][1][k]){
						ls++;
					}
				}
				if (k==0){
					cnt[i][j][k]=ls;
				}
				else {
					cnt[i][j][k]=pre[i][j-1][k-1]*ls;
				}
				pre[i][j][k]=pre[i][j-1][k]+cnt[i][j][k];
			}
			a[i][1][k]=a[i][1][k]-'a'+'A';
		}
	}
	for (int i=1;i<=m;i++){
		int ans=0;
		for (int j=2;j<=len[i];j++){
			ans+=cnt[i][j][(int)a[i][1].size()-1];
		}
		if (ans==0){
			cout<<a[i][1]<<" is not a valid abbreviation"<<endl;
		}
		else {
			cout<<a[i][1]<<" can be formed in "<<ans<<" ways"<<endl;
		}
	}
}
2024/11/27 12:51
加载中...