QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#584176#6562. First LastBINYUWA 0ms3644kbC++142.4kb2024-09-23 09:55:252024-09-23 09:55:26

Judging History

你现在查看的是最新测评结果

  • [2024-09-23 09:55:26]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3644kb
  • [2024-09-23 09:55:25]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
struct Sqare
{
	int a[3][3];
	bool operator < (const Sqare &b) const
	{
		for(int i = 0;i < 3;i++)
			for(int j = 0;j < 3;j++)
				if(a[i][j] != b.a[i][j])
					return a[i][j] < b.a[i][j];
		return 0;
	}
}st;
int n,ans[3][3],cnt;
char c[25];
map <pair <Sqare,int> ,int> mp;
map <char,int> id;
int solve(Sqare st,int p)
{
	if(mp[{st,p}])return mp[{st,p}];
	int res = -1;
	for(int i = 0;i < 3;i++)
		if(st.a[p][i])
			st.a[p][i]--,
			res = max(res,-solve(st,i)),
			st.a[p][i]++;
	mp[{st,p}] = res;
	return res;
}
int main()
{
	scanf("%d",&n);
	while(n--)
	{
		scanf("%s",c + 1);int m = strlen(c + 1);
		if(!id[c[1]])id[c[1]] = ++cnt;
		if(!id[c[m]])id[c[m]] = ++cnt;
		st.a[id[c[1]] - 1][id[c[m]] - 1]++;
	}
	Sqare now = st;
	for(int i = 0;i < 3;i++)
	{
		st.a[i][i] %= 2;
		for(int j = 0;j < i;j++)
		{
			int mn = min(st.a[i][j],st.a[j][i]);
			st.a[i][j] -= mn;st.a[j][i] -= mn;
		}
	}
	for(int i = 0;i < 3;i++,puts(""))
		for(int j = 0;j < 3;j++)
			cout<<st.a[i][j]<<" ";
	int mn = min(min(st.a[0][1],st.a[1][2]),st.a[2][0]);
	if(!mn)
	{
		swap(st.a[1][2],st.a[2][1]);
		swap(st.a[0][2],st.a[0][1]);
		swap(st.a[2][0],st.a[1][0]);
		swap(st.a[1][1],st.a[2][2]);
		swap(now.a[1][2],now.a[2][1]);
		swap(now.a[0][2],now.a[0][1]);
		swap(now.a[2][0],now.a[1][0]);
		swap(now.a[1][1],now.a[2][2]);
	}
	mn = min(min(st.a[0][1],st.a[1][2]),st.a[2][0]);
	if(mn <= 3)
	{
		for(int i = 0;i < 3;i++)
			for(int j = 0;j < 3;j++)
				if(st.a[i][j])
					st.a[i][j]--,
					ans[i][j] = solve(st,j),
					st.a[i][j]++;
				else
					st.a[j][i]++,
					ans[i][j] = solve(st,j),
					st.a[j][i]--;
		int sum = 0;
		for(int i = 0;i < 3;i++)
			for(int j = 0;j < 3;j++)
				if(ans[i][j] == -1)
					sum += now.a[i][j];
		cout<<sum<<"\n";
	}
	else
	{
		st.a[0][1] -= mn;st.a[1][2] -= mn;st.a[2][0] -= mn;
		int res = (mn * 3 + st.a[0][1] + st.a[1][2] + st.a[2][0]) % 2;
		st.a[0][0] = st.a[1][1] = st.a[2][2] = 0;
		for(int i = 0;i < 3;i++)
			for(int j = 0;j < 3;j++)
				if(st.a[i][j])
					st.a[i][j]--,
					ans[i][j] = solve(st,j),
					st.a[i][j]++;
				else
					st.a[j][i]++,
					ans[i][j] = solve(st,j),
					st.a[j][i]--;
		int sum = 0;
		for(int i = 0;i < 3;i++)
			for(int j = 0;j < 3;j++)
				if(ans[i][j] == -1&&res == 1)
					sum += now.a[i][j];
				else if(ans[i][j] == 1&&res == 0)
					sum += now.a[i][j];
		cout<<sum<<"\n";
	}
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3644kb

input:

3
attic
climb
alpha

output:

1 1 0 
0 0 1 
0 0 0 
2

result:

wrong answer 1st lines differ - expected: '2', found: '1 1 0 '