求助,CE了,可是DEVC++上运行时好好的,洛谷上连哪里错了也没报
查看原帖
求助,CE了,可是DEVC++上运行时好好的,洛谷上连哪里错了也没报
397352
bitsetint楼主2021/9/18 20:45

RT,求大佬帮忙看一下~

提交信息:check here

#include <bits/stdc++.h>
using namespace std;
int n;
string jia[2],sum;
int num[30];
int t_sum[30];
int fflag=0;
map<int,int>mp;
int aans[30];
map<pair<char,char>,char>mp2;
void dfs(int dep)
{
	if(dep>3)
	for(int i=0;i<n;i++)
	{
		if(mp[jia[0][i]]!=1||mp[jia[1][i]]!=1||mp[sum[i]]!=1)
		{
			continue;
		}
		int kkk;
		if(num[jia[0][i]]+num[jia[1][i]]>=10)kkk=num[sum[i]]+10;
		else kkk=num[sum[i]];
		if(!(num[jia[0][i]]+num[jia[1][i]]-kkk==1||num[jia[0][i]]+num[jia[1][i]]-kkk==0))
		return ;
	}
	if(dep==n)
	{
		for(int i=n-1;i>=0;i--)
		{
			t_sum[n-i-1]=num[sum[i]-'A'];
		}
		int a[30],b[30],ans[30];
		for(int i=n-1;i>=0;i--)
		{
			a[n-i-1]=num[jia[0][i]-'A'];
			b[n-i-1]=num[jia[1][i]-'A'];
		}
		memset(ans,0,sizeof(ans));
		for(int i=0;i<n;i++)
		{
			ans[i]+=a[i]+b[i];
			if(ans[i]>=n)
			{
				ans[i]-=n;
				ans[i+1]++;
			}
		}
		int flag=1;
		for(int i=0;i<n;i++)
		{
			if(ans[i]!=t_sum[i])flag=0;
		}
		if(flag==1)
		{
			fflag=1;
		}
		return ;
	}
	for(int i=n-1;i>=0;i--)
	if(mp[i]!=1)
	{
		mp[i]=1;
		num[dep]=i;
		dfs(dep+1);
		if(fflag==1)return ;
		mp[i]=0;
		num[dep]=-1;
	}
}
int main()
{
	memset(num,-1,sizeof(num));
	scanf("%d",&n);
	cin>>jia[0]>>jia[1];
	cin>>sum;
	for(int i=0;i<n;i++)
	{
		mp2[make_pair(jia[0][i],jia[1][i])]=sum[i];
	}
	dfs(0);
	for(int i=0;i<n;i++)cout<<num[i]<<" ";
	return 0;
}
2021/9/18 20:45
加载中...