社区讨论

本蒟弱改不下去了,大佬帮忙看看qwq

P1092[NOIP 2004 提高组] 虫食算参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi7db7sq
此快照首次捕获于
2025/11/20 19:48
4 个月前
此快照最后确认于
2025/11/20 19:48
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
using namespace std;
int qwq[27],n; //字母代表数 
int qaq[27][4]; //算式 
bool qvq[27],ye; //标记 
bool ok()
{
	int h=0,a,b,c;
	//cout << endl;
	//for(int r=1;r<=n;r++)
	//{
	//	cout << qwq[r] << ' ';
	//}
	//cout << endl;
	//for(int a=1;a<=3;a++)
	//{
	//	for(int r=1;r<=n;r++)
	//	{
	//		cout << qwq[qaq[r][a]];
	//	}
	//	cout << endl;
	//}
	//cout << endl;
	for(int r=n;r>=1;r--)
	{
		a=qwq[qaq[r][1]];
		b=qwq[qaq[r][2]];
		c=qwq[qaq[r][3]];
		//cout << a << ' ' << b  << ' ' << c << endl;
		h+=a+b;
		if(c%n != h%n) return 0;
		h/=n;
	}
	return 1;
}
bool cx()
{
	int h=0,a,b,c;
	for(int r=n;r>=1;r--)
	{
		a=qwq[qaq[r][1]];
		b=qwq[qaq[r][2]];
		c=qwq[qaq[r][3]];
		if(a == 30 || (b == 30 || c == 30))
		{
			//emmm;
		}
		else
		{
			h=a+b;
			if(r == 1) if(h >= n) return 0;
			h%=n;
			c%=n;
			if(h != c && (h+1)%n != c) return 0;
			//cout << h << ' ' << c << endl;
		}
	}
	return 1;
}
void dfs(int o)
{
	if(o == n+1)
	{
		if(ok()) ye=1;
		return;
	}
	for(int r=0;r<n;r++)
	{
		if(qvq[r])
		{
			qwq[o]=r;
			qvq[r]=0;
			if(cx()) dfs(o+1);
			if(ye) return;
			qvq[r]=1;
			qwq[o]=30;
		}
	}
}
int main()
{
	char z;
	cin >> n;
	for(int a=1;a<=3;a++)
	{
		for(int r=1;r<=n;r++)
		{
			cin >> z;
			qaq[r][a]=z-64;
		}
	}
	for(int r=0;r<=n;r++)
	{
		qvq[r]=1;
		qwq[r]=30;
	}
	dfs(1);
	for(int r=1;r<=n;r++)
	{
		cout << qwq[r] << ' ';
	}
}
改了3小时了 实在不会写
QvQ

回复

1 条回复,欢迎继续交流。

正在加载回复...