求助大佬!Too short on line 1
查看原帖
求助大佬!Too short on line 1
371278
herselfqwq楼主2021/9/2 20:13

RT,全WA了,但是样例和一组数据都能过,求大佬查错!

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define re register
#define umap unordered_map
const int N=15;
char numlist[N],a[N];
int n,cnt,num[N][N],book[N];
string sbase[N],safter[N][N];
umap<string,umap<string,string> > mp;
umap<char,int>vis,ans;
il int R () {
	re int s=0,f=1;re char ch=getchar();
	while (!isdigit(ch)) {if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)) {s=(s<<3)+(s<<1)+(ch^48);ch=getchar();}
	return s*f;
}
il void input () {
	n=R();
	for (re int i=1;i<=n;i++) {
		re char ch;re string st="";
		while (ch=getchar()) {
			if (ch=='\n') {sbase[i]+=st;break;}
			st+=ch;
		}
	}
}
il void pre () {
	for (re int i=1;i<=n;i++) {
		re string st="";re int tot=0;
		if (i==1) safter[1][++tot]="+";
		for (re int j=(i==1?2:0);j<sbase[i].size();j++) {
			if (!isalpha(sbase[i][j])) {safter[i][++tot]=st,st="";continue;}
			if (j==sbase[i].size()-1) st+=sbase[i][j],safter[i][++tot]=st,st="";
			else st+=sbase[i][j];
			if (!vis.count(sbase[i][j])) vis[sbase[i][j]]=1,a[++cnt]=sbase[i][j];
		}
	}
	for (re int i=2;i<=n;i++) {for (re int j=2;j<=n;j++) {mp[safter[1][i]][safter[j][1]]=safter[j][i];}}
	return;
}
il int power (int x,int y) {
	if (x==0) return 0;
	re int ret=1;
	while (y) {
		if (y%2) ret*=x;
		x*=x;
		y=(y>>1);
	}
	return ret;
}
il int cal (string st) {
	int ret=0;
	for (int i=0;i<st.size();i++) {
		char ch=st[i];
		ret+=ans[ch]*power(cnt,st.size()-i-1);
	}
	return ret;
}
il int check () {
	for (re int i=2;i<=n;i++) {
		for (re int j=2;j<=n;j++) {
			string idx=safter[1][i],idy=safter[j][1],idz=safter[j][i];
			int x=cal(idx),y=cal(idy),z=cal(idz);
			if (x+y!=z) return 0;
		}
	}
	return 1;
}
il void dfs (int step) {
	if (step==cnt+1) {
		if (check()) {
			for (re int i=1;i<=cnt;i++) cout<<a[i]<<'='<<ans[a[i]]<<' ';
			puts("");
			printf("%d",cnt);
			exit(0);
		}
		return ;
	}
	for (int i=0;i<cnt;i++) {
		if (!vis[i]) {
			ans[a[step]]=i;
			vis[i]=1;
			dfs(step+1);
			vis[i]=0;
			ans[a[step]]=0;
		}
	}
}
int main () {
	// freopen("1013.in","r",stdin);
	// freopen("1013.out","w",stdout);
	input();
	pre();
	check();
	dfs(1);
	return 0;
}
2021/9/2 20:13
加载中...