本来这道题是很简单的一道题,只因为我多加了一个输出,导致wa了n遍,真的哭死在厕所~
#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 1000
using namespace std;
int n,k,l,tmp,tot,jj;
int s[maxn][maxn],ol[maxn];
char c[maxn];
void init()
{
tot=0;
// printf("%d\n",k);//就是多加了这个,检查了好久啊%>_<%
for(int i=1; i<=k; i++)
{
scanf("%d",&l);
s[i][0]=l;
for(int j=1; j<=2*l; j++)
scanf("%d",&s[i][j]);
getchar();
scanf("%c",&c[i]);
if(c[i]!='=')
tot++;
}
for(int i=1; i<=k; i++)
{
if(c[i]=='<')
{
int t=2*s[i][0];
for(int j=1; j<=t/2; j++)
{
int temp=s[i][j];
s[i][j]=s[i][t-j+1];
s[i][t-j+1]=temp;
}
c[i]='>';
}
}
}
int solve(int key)
{
int i,j,ok,kk1=0,kk2=0,down;//kk1记录不等式左边出现次数,kk2记录不等式右边出现次数
for( i=1; i<=k; i++)
{
ok=0;
int cnt = s[i][0];
for( j=1; j<=cnt*2; j++)
{
// printf(" key = %d cnt = = %d\n",key,s[i][j]);
if(s[i][j]==key)
{
ok=1;
down=j;
break;
}
}
if(ok&&c[i]=='=')return 1;
if(!ok&&c[i]!='=')return 1;
if(!ok&&c[i]=='=')
{
for(int k=1; k<=2*cnt; k++)
ol[s[i][k]]=1;
}
else
{
if(down>cnt)kk2++;
else kk1++;
if(kk2>0&&kk1>0)return 1;
}
}
if(kk1==tot||kk2==tot)
{
jj++;
tmp=key;
}
return 1;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
int cnt=0;
tmp=0,jj=0;
init();
// for(int i=1; i<=k; i++)
// {
// for(int j=1; j<=2*s[i][0]; j++)
// printf("%d ",s[i][j]);
// printf("\n");
// }
for(int i=1; i<=n; i++)
{
if(!ol[i])
solve(i);
}
if(jj!=1)
printf("0\n");
else
printf("%d\n",tmp);
memset(c,0,sizeof(c));
memset(s,0,sizeof(s));
memset(ol,0,sizeof(ol));
}
return 0;
}