Advertisement

hdu 4194#模拟

阅读量:

比赛的时候一直WA,原来题意就完全领会。

一些条件,第i个人发表第i篇文章,将这些文章给n个人审查

规定:第一条,“每篇文章需被K位读者评论(其中K代表每篇论文将收到的评论数量),诚然这条规则尚不完全明了。”

禁止任何人查看与其本人或本学院教师及同学所写的文章内容,并要求所有人都不得多次阅读任何一篇文章。

附:解题报告

The ith paper will be incorrectly evaluated if it is assessed...

复制代码
 #include <stdio.h>

    
 #include <iostream>
    
 #include <string>
    
 #include <vector>
    
 #include <map>
    
 #include <algorithm>
    
 using namespace std;
    
  
    
 const int N = 1000;
    
 int vio,pos[N];
    
 vector<int> paper[N];
    
 map<string,int> p;
    
  
    
 int main()
    
 {
    
     int k,n,i,j,a;
    
     string str;
    
     while(cin >> k >> n && n)
    
     {
    
  
    
     for(i = 0; i < n; ++i)
    
     {
    
         cin >> str;
    
         if(p.find(str) == p.end())
    
             p[str] = p.size();
    
         pos[i] = p[str];///第i个人的学院位置
    
         for(j = 0; j < k; ++j)
    
         {
    
             cin >> a;
    
             --a;
    
             paper[a].push_back(i);
    
         }
    
     }
    
     vio = 0;
    
     for(i = 0; i < n; ++i)
    
     {
    
         if(paper[i].size() != k)
    
             ++vio;
    
         else
    
         {
    
             sort(paper[i].begin(),paper[i].end());
    
             for(j = 0; j < k; ++j)
    
                 if(pos[i] == pos[paper[i][j]] || (j > 0 && paper[i][j] == paper[i][j-1]))
    
                 {
    
                     ++vio;
    
                     break;
    
                 }
    
         }
    
         paper[i].clear();
    
     }
    
  
    
     switch(vio)
    
     {
    
         case 0:
    
             printf("NO PROBLEMS FOUND\n");
    
             break;
    
         case 1:
    
             printf("1 PROBLEM FOUND\n");
    
             break;
    
         default:
    
             printf("%d PROBLEMS FOUND\n",vio);
    
     }
    
     p.clear();
    
     }
    
     return 0;
    
 }
    
    
    
    
    代码解读

全部评论 (0)

还没有任何评论哟~