8VC Venture Cup 2016 -A - Robot Sequence/B - Cards

http://codeforces.com/contest/626


A - Robot Sequence

直接暴力枚举n^2个子串,然后for一遍判断每个子串,左加右减,上加下减,看两个sum是否为零


B - Cards

分类讨论一下。。。

可以发现 当子串所含字母只有一个种类的时候,直接输出该种类

当子串含3个种类的时候,显然根据性质2,可以直接把整个串变成  BRG,最后能得到三个颜色

当种类的2的时候比较多情况一点:

如果两个种类个数都超过2,那么显然各拿出一个,根据性质1变出未出现的种类,那么又回到三种的情况了。

如果两个种类个数都为1,也就是BR,GR.BG,显然答案就是未出现过的字母

如果有一种个数不超过2,一个超过2,也就是BRR,GRR,BBG这样的情况,显然,他们得到两种结果,1是未出现过的字母,二是出现次数为1的字母.....如BRR的答案是 G和B

代码写得挫:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std; 
__int64 mod=1000000000+7;  
char tm[205];  

int vis[44];
int main()
{
	int n,i,j;
	cin>>n;
	scanf("%s",tm+1);
	for (i=1;i<=n;i++)
	{
		if (tm[i]=='B')
		{vis[1]++;}
		if (tm[i]=='R')
			vis[2]++;
		if (tm[i]=='G')
			vis[3]++;
	}
	int cun=0;
	for (i=1;i<=3;i++)
		if (vis[i]) cun++;
		if (cun==3)
		{	printf("BGR\n");return 0;}
		else
			if (cun==1)
			{	
				if (vis[1])
					printf("B\n");
				else if (vis[2])
					printf("R\n");
				else
					printf("G\n");
				return 0;
			}
			else
				if (cun==2)
				{
					int cc=0;
					for (i=1;i<=3;i++)
						if (vis[i]>=2) cc++;
						
						if (cc>=2) printf("BGR\n");
						else
						{
							
							if (vis[2]&&vis[3])
							{
								if (vis[2]==1&&vis[3]==1) printf("B\n");
								else
								{
									if (vis[3]>=2)
										printf("BR\n");
									else	//RRG
										printf("BG\n");
								}
							}
							if (vis[2]&&vis[1])
							{
								if (vis[2]==1&&vis[1]==1) printf("G\n");
								else
								{
									if (vis[2]>=2)
										printf("BG\n");
									else
										printf("GR\n");
								}
							}
							if (vis[1]&&vis[3])
							{
								if (vis[1]==1&&vis[3]==1) printf("R\n");
								else
								{
									if (vis[1]>=2)
										printf("GR\n");
									else
										printf("BR\n");
								}
							}
							
						}
				}
				return 0;
				
} 


 






你可能感兴趣的:(8VC Venture Cup 2016 -A - Robot Sequence/B - Cards)