每次浙大月赛都打酱油,中午这种题,愣是把数字敲错了。
。。。。。。
#include <cstdio>
#include <cstring>
int num[10];
char s[20], s2[10];
int t[10];
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
memset(num, 0, sizeof(num));
for(int k = 0; k < n; k++)
{
scanf("%s%s", s, s2);
memset(t, 0, sizeof(t));
int len = strlen(s2);
for(int i = 0; i < len; i++)
{
if(s2[i] == 'A') t[1]++;
else if(s2[i] == 'C') t[2]++;
else if(s2[i] == 'G') t[3]++;
}
if(t[1] >= 1 && t[2] >= 1 && t[3] >= 1) num[0]++;
else if(t[1] >= 1 && t[2] >= 1) num[4]++;
else if(t[1] >= 1 && t[3] >= 1) num[5]++;
else if(t[2] >= 1 && t[3] >= 1) num[6]++;
else if(t[1] >= 1) num[1]++;
else if(t[2] >= 1) num[2]++;
else if(t[3] >= 1) num[3]++;
}
int d = 0;
int b = 0;
for(int i = 1; i <= 3; i++)
if(num[i] >= 1) d++;
for(int i = 4; i <= 6; i++)
if(num[i] >= 1) b++;
if(b == 3 || d == 0) //3种边有,肯定行
{
printf("Yes\n");
}
else if(d == 1)
{
if(b == 0) printf("Yes\n");
else if(b == 1)
{
if(num[1] >= 1 && (num[4] >= 1 || num[5] >= 1)) printf("Yes\n");
else if(num[2] >= 1 && (num[4] >= 1 || num[6] >= 1)) printf("Yes\n");
else if(num[3] >= 1 && (num[5] >= 1 || num[6] >= 1)) printf("Yes\n");
else
{
if(num[0] >= 2) printf("Yes\n");
else printf("No\n");
}
}
else if(b == 2)
{
if(num[1] >= 1 && (num[4] >= 1 && num[5] >= 1)) printf("Yes\n");
else if(num[2] >= 1 && (num[4] >= 1 && num[6] >= 1)) printf("Yes\n");
else if(num[3] >= 1 && (num[5] >= 1 && num[6] >= 1)) printf("Yes\n");
else //肯定是一个边与这个点有关,一个无关
{
if(num[1] >= 1 && (num[4] >= 2 || num[5] >= 2)) printf("Yes\n");
else if(num[2] >= 1 && (num[4] >= 2 || num[6] >= 2)) printf("Yes\n");
else if(num[3] >= 1 && (num[5] >= 2 || num[6] >= 2)) printf("Yes\n");
else
{
if(num[0] >= 1) printf("Yes\n");
else printf("No\n");
}
}
}
}
else if(d == 2)
{
if(b == 0)
{
if(num[0] >= 2) printf("Yes\n");
else printf("No\n");
}
else if(b == 1)
{
//夹在两点之间
if(num[1]>=1&&num[2]>=1&&num[4]>=1)
{
if(num[0] + num[4] >= 2) printf("Yes\n");
else printf("No\n");
}
else if(num[1]>=1&&num[3]>=1&&num[5]>=1)
{
if(num[0] + num[5] >= 2) printf("Yes\n");
else printf("No\n");
}
else if(num[2]>=1&&num[3]>=1&&num[6]>=1)
{
if(num[0] + num[6] >= 2) printf("Yes\n");
else printf("No\n");
}
else
{
if(num[0] >= 2) printf("Yes\n");
else printf("No\n");
}
}
else if(b == 2)
{
if(num[1]>=1&&num[2]>=1)
{
if(num[4] >= 2) printf("Yes\n");
else
{
if(num[5] >= 2 && num[6] >= 2) printf("Yes\n");
else if(num[0] >= 1 && (num[5] >= 2 || num[6] >= 2)) printf("Yes\n");
else if(num[0] >= 1) printf("Yes\n");
else printf("No\n");
}
}
else if(num[1]>=1&&num[3]>=1)
{
if(num[5] >= 2) printf("Yes\n");
else
{
if(num[4] >= 2 && num[6] >= 2) printf("Yes\n");
else if(num[0] >= 1 && (num[4] >= 2 || num[6] >= 2)) printf("Yes\n");
else if(num[0] >= 1) printf("Yes\n");
else printf("No\n");
}
}
else if(num[2]>=1&&num[3]>=1)
{
if(num[6] >= 2) printf("Yes\n");
else
{
if(num[4] >= 2 && num[5] >= 2) printf("Yes\n");
else if(num[0] >= 1 && (num[4] >= 2 || num[5] >= 2)) printf("Yes\n");
else if(num[0] >= 1) printf("Yes\n");
else printf("No\n");
}
}
}
}
else
{
if(b == 0)
{
if(num[0] >= 3) printf("Yes\n");
else printf("No\n");
}
else if(b == 1)
{
if(num[0] >= 2) printf("Yes\n");
else printf("No\n");
}
else if(b == 2)
{
if(num[4] >= 1 && num[5] >= 1)
{
if(num[4] >= 2 && num[5] >= 2) printf("Yes\n");
else if(num[0] >= 1) printf("Yes\n");
else printf("No\n");
}
else if(num[4] >= 1 && num[6] >= 1)
{
if(num[4] >= 2 && num[6] >= 2) printf("Yes\n");
else if(num[0] >= 1) printf("Yes\n");
else printf("No\n");
}
else if(num[5] >= 1 && num[6] >= 1)
{
if(num[5] >= 2 && num[6] >= 2) printf("Yes\n");
else if(num[0] >= 1) printf("Yes\n");
else printf("No\n");
}
}
}
}
return 0;
}