原地址 http://codeforces.com/contest/787/problem/B
题目大意 有n个数,m个组,每组k个数,如果每组都存在一个数的正负表示,输出 NO 否则输出YES;
分析 需要同时记录一个数的正负形式,判断它的正负是否出现过,然后想到map的映射。
判断mp[a]和mp[-a]是否都出现过
自己出现的问题 1.一开始以为map<int,int>和数组一样= = 然后发现用数组的负下标是不能过的(对负下标这方面不了解0.0)
2.输入数据结束前,输出结果(简直作死- -因为这个分都掉光了)。
代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#include<cstring>
#include <map>
#include <cstdlib>
#define T 1001000
using namespace std;
typedef long long ll;
map<int,int>mp;
int c[10010];
int main()
{
int n,m,k,f,q;
scanf("%d%d",&n,&m);
q=0;
for(int i=0;i<m;i++)
{
f=0;
scanf("%d",&k);
memset(c,0,sizeof(c));
mp.clear();
for(int j=0;j<k;j++)
{
scanf("%d",&c[j]);
mp[c[j]]=1;
if(mp[c[j]]==1&&mp[-c[j]]==1)
f=1;
}
if(f==0)
q=1;
}
if(q==1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}