zoukankan      html  css  js  c++  java
  • hdu 6008

    http://acm.hdu.edu.cn/showproblem.php?pid=6008

    题意:world final的入场券是由一个规则确定的,首先他会分配一个g(总的门票数),g = x+y,x代表给五个中国赛区分配的入场券的个数,y代表给国外的那个赛区分配的个数

    在中国赛区的学校是由首先依次轮流选取1->5个赛区的第一名,第二名,第三名,直到x用完,也就是说如果1赛区第二名可以进final的话,那么1-5个赛区的第一名一定都可以进final

    当然,每个学校只占用一个名额,那个国外赛区的就是选取前y名,这前y名也不包括已经拿到final门票的学校

    思路:模拟

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <string>
     4 #include <iostream>
     5 #include <map>
     6 using namespace std;
     7 
     8 string str[10][100];
     9 string es[100];
    10 string ans;
    11 int a[1005];
    12 map<string,int>s;
    13 bool vis[1005];
    14 int main()
    15 {
    16     int t;
    17     int g;
    18     int x,y;
    19     int cnt,cut=1;
    20     scanf("%d",&t);
    21     while(t--)
    22     {
    23         memset(vis,false,sizeof(vis));
    24         cnt = 0;
    25         s.clear();
    26         y = -1;
    27         cin>>g>>ans;
    28         s[ans] = cnt++;
    29         for(int i = 1;i<=5;i++)
    30             for(int j = 1;j<=20;j++)
    31             {
    32                 cin>>str[i][j];
    33                 if(!s.count(str[i][j]))
    34                     s[str[i][j]] = cnt++;
    35             }
    36         for(int i = 1;i<=20;i++){
    37             cin>>es[i];
    38             if(!s.count(es[i]))
    39                 s[es[i]] = cnt++;
    40         }
    41         cnt = 0;
    42         for(x = 0;x<=g;x++)
    43         {
    44             memset(vis,false,sizeof(vis));
    45             cnt = 0;
    46             bool lo = false,cy = false;
    47             if(x>0)
    48             {
    49                 for(int i = 1;i<=20;i++)
    50                 {
    51                     for(int j = 1;j<=5;j++)
    52                     {
    53                         if(cnt>=x)
    54                             break;
    55                         if(!vis[s[str[j][i]]])
    56                         {
    57                             if(str[j][i]==ans)
    58                                 lo = true;
    59                             vis[s[str[j][i]]] = true;
    60                             cnt++;
    61                         }
    62                     }
    63                     if(cnt>=x)
    64                         break;
    65                 }
    66             }
    67             if(g-x>0)
    68             {
    69                 for(int j = 1;j<=20;j++)
    70                 {
    71                     if(cnt>=g)
    72                         break;
    73                     if(!vis[s[es[j]]])
    74                     {
    75                         if(es[j]==ans)
    76                             cy = true;
    77                         vis[s[es[j]]] =true;
    78                         cnt++;
    79                     }
    80                 }
    81             }
    82             if(!lo&&!cy)
    83                 y = g-x;
    84         }
    85         printf("Case #%d: ",cut++);
    86         if(y==-1)
    87             printf("ADVANCED!
    ");
    88         else
    89             printf("%d
    ",y);
    90     }
    91     return 0;
    92 }
  • 相关阅读:
    git连接到https服务器时出现“gnutls_handshake() failed”
    Linux内核:通知链 机制
    在Linux驱动中使用notifier通知链
    Linux 内核:RCU机制与使用
    什么是工程师文化?
    在Android源码中查找Java代码中native函数对应的C++实现
    Windows下Qt5程序打包发布
    Android Framework:如何让 App 拿到Power key 值
    Windows 监控小工具
    Windows 远程桌面无法上传文件或者文件夹
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/7486444.html
Copyright © 2011-2022 走看看