关于今日月赛B
  • 板块学术版
  • 楼主EgLund
  • 当前回复12
  • 已保存回复12
  • 发布时间2021/2/9 18:07
  • 上次更新2023/11/5 03:29:21
查看原帖
关于今日月赛B
313716
EgLund楼主2021/2/9 18:07

我的做法假吗?

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int abs(int w){if(w<0)w=-w;return w;}
int n;int p[114514],q[114514];
queue<int> one,zero;
int niam()
{
	one=queue<int>();zero=queue<int>();
	cin>>n;
	for(int i=1;i<=n;i++){char c;cin>>c;if(c=='1')p[i]=1;if(c=='0')p[i]=0;}
	for(int i=1;i<=n;i++){char c;cin>>c;if(c=='1')q[i]=1;if(c=='0')q[i]=0;}
	for(int i=1;i<=n;i++)
	{
		if(p[i]+q[i]==2)one.push(i);
		if(p[i]+q[i]==0)zero.push(i);
	}
	while(!one.empty())
	{
		int i=one.front();one.pop();
		while(!zero.empty() && abs(i-zero.front())!=1)zero.pop();
		if(zero.empty())return printf("++\n"),0;
		else zero.pop();
	}
	printf("RP\n");
	return 0;
}
int main()
{
	int T;cin>>T;while(T--)niam();
}

思路就是,如果一列只有1个红点,默认染色这一列。然后枚举每一个有2个红点的列,在没有红点的列里匹配,如果直到结尾还未匹配则输出++

勿喷(包括但不限于UID1****4的某神仙)

2021/2/9 18:07
加载中...