月赛B求助
  • 板块学术版
  • 楼主zzx2002
  • 当前回复15
  • 已保存回复15
  • 发布时间2021/2/9 18:15
  • 上次更新2023/11/5 03:29:16
查看原帖
月赛B求助
446375
zzx2002楼主2021/2/9 18:15

在自己电脑上跑了几个测试点没发现毛病欸...
结果就re+wa
思路:从左到右依次遍历,遇到相邻(右和下)不同的就填色,边界及特殊情况特殊处理。
蒟蒻代码如下:

#include<bits/stdc++.h>

using namespace std;
bool arr[100010][5],tip[100010][5],re[15]//填色数组;
int main()
{
	ios::sync_with_stdio(0);
	int T, n;
	cin >> T;
	for (int i = 0; i < T; i++)
	{
		memset(tip, 0, sizeof(tip));
		memset(arr, 0, sizeof(arr));
		cin >> n;

		getchar();
		for (int k = 0; k < n; k++)
		{
			arr[k][0] = (int)(getchar() - 48);
		}
		getchar();
		for (int k = 0; k < n; k++)
		{
			arr[k][1] = (int)(getchar() - 48);
		}//二维数组读入
			for (int p = 0; p < n; p++)//第一行
			{
				if (tip[p][0] == 1)//已填就跳
				{
					continue;
				}
				if (p == n - 1)//边界
				{
					if (arr[p][0] == 1)
					{
						if (arr[p][1] != 0)
						{
							re[i] = 1;
							goto next;
						}
						else {
							tip[p][0] = tip[p][1] = 1;
							break;
						}
					}
				}
				if (arr[p][0] == 0)
				{
					if (arr[p + 1][0] == 1)
					{
						tip[p][0] = tip[p + 1][0] = 1;
					}
					else if (arr[p][1] == 1)
					{
						tip[p][0] = tip[p][1] = 1;
					}
				}
				else if (arr[p][0] == 1)
				{
					if (arr[p + 1][0] == 0)
					{
						tip[p][0] = tip[p + 1][0] = 1;
					}
					else if (arr[p][1] == 0)
					{
						tip[p][0] = tip[p][1] = 1;
					}
					else {
						re[i] = 1;
						goto next;
					}
				}
			}
			for (int p = 0; p < n; p++)//第二行
			{
				if (tip[p][1] == 1)//已填就跳
				{
					continue;
				}
				if (p == n - 1)//边界
				{
					if (arr[p][1] == 1)
					{
						re[i] = 1;
						goto next;
					}
					break;
				}
				if ((arr[p][1] == 0) && (arr[p + 1][1] == 1) && (tip[p + 1][1]!=1))
				{
					tip[p][1] = tip[p+1][1] = 1;
				}
				else if (arr[p][1] == 1)
				{
					if ((arr[p + 1][1] == 0) && (tip[p + 1][1] != 1))
					{
						tip[p + 1][1] = tip[p][1] = 1;
					}
					else
					{
						re[i] = 1;
						break;
					}
				}
			}
		next:;
	}
	for (int i = 0; i < T; i++)
	{
		if (re[i] == 1)
			printf("++\n");
		else
			printf("RP\n");
	}
	return 0;
}
2021/2/9 18:15
加载中...