记录详情

Accepted


  
# 状态 耗时 内存占用
#1 Accepted 1ms 212.0 KiB
#2 Accepted 1ms 272.0 KiB
#3 Accepted 1ms 288.0 KiB
#4 Accepted 1ms 212.0 KiB
#5 Accepted 1ms 212.0 KiB
#6 Accepted 1ms 208.0 KiB
#7 Accepted 3ms 212.0 KiB
#8 Accepted 1ms 308.0 KiB
#9 Accepted 12ms 300.0 KiB
#10 Accepted 1ms 204.0 KiB

代码

#include<bits/stdc++.h>
using namespace std;
int n,num[27],use[27];
char s[4][27];
int id(char x)
{
	return x-'A'+1;
}
void dfs(int x,int y,int jw)
{
	if(x==0)
	{
		if(jw==0)
		{
			for(int i=1;i<=n;i++)
				printf("%d ",num[i]);
			exit(0);
		}
		return;
	}
	for(int i=x-1;i>=1;i--)
	{
		int w1=num[id(s[1][i])];
		int w2=num[id(s[2][i])];
		int w3=num[id(s[3][i])];
		if(w1==-1||w2==-1||w3==-1)
			continue;
		if((w1+w2)%n!=w3&&(w1+w2+1)%n!=w3)
			return;
	}
	if(num[id(s[y][x])]==-1)
	{
		for(int i=n-1;i>=0;i--)
		{
			if(!use[i])
			{
				if(y!=3)
				{
					num[id(s[y][x])]=i;
					use[i]=1;
					dfs(x,y+1,jw);
					use[i]=0;
					num[id(s[y][x])]=-1;
				}
				else
				{
					int w=num[id(s[1][x])]+num[id(s[2][x])]+jw;
					if(w%n!=i)
						continue;
					num[id(s[y][x])]=i;
					use[i]=1;
					dfs(x-1,1,w/n);
					use[i]=0;
					num[id(s[y][x])]=-1;
				}
			}
		}
	}
	else
	{
		if(y!=3)
			dfs(x,y+1,jw);
		else
		{
			int w=num[id(s[1][x])]+num[id(s[2][x])]+jw;
			if(w%n!=num[id(s[3][x])])
				return;
			dfs(x-1,1,w/n);
		}
	}
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=3;i++)
		scanf("%s",s[i]+1);
	memset(num,-1,sizeof(num));
	dfs(n,1,0);
}

信息

递交者
类型
递交
题目
P1001 虫食算
语言
C++
递交时间
2019-08-22 10:58:25
评测时间
2019-08-22 11:46:49
评测机
分数
100
总耗时
27ms
峰值内存
308.0 KiB