Codeforces Round #406 (Div. 2) B. Not Afraid
原地址 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; }