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;

}

  

原文地址:https://www.cnblogs.com/a249189046/p/6611189.html