• ZOJ 3757 Alice and Bob and Cue Sports(模拟)


    题目链接

    题意 : 玩台球。Alice 和 Bob,一共可以进行m次,Alice 先打。有一个白球和n个标有不同标号的球,称目标球为当前在桌子上的除了白球以外的数值最小的球,默认白球的标号为0。如果白球落入洞中,要把白球拿出来放在桌子上,如果是其他的球就不拿哪怕是犯规打进去的。每打一局(每一局代表每人打一杆)时当发生以下三种行为时算是犯规,会将相应的罚分加给对方,自己不减分。

    1. 白球没有打中任何球。将目标球的数值加到对方的分数上。
    2. 白球没有入洞且至少打中一个球,一开始没有打中目标球或者一开始同时打中不止一个球。就把一开始打中的球中数值最大的加到对方的分数上。
    3. 白球入洞且至少打中一个球。就把一开始打中的球中数值最大的加到对方的分数上。

    如果没有犯规的话,就把洞里所有的球的数值总和加到自己的分数上。但如果是犯了规才把目标球打入洞中,或者是打入洞中的球没有目标球,上边这个数值总和就要再加给对方而不是自己。

    思路 : 模拟了好几个小时没模拟出来。。。。。。。其实就是注意细节的问题,该怎么处理什么的。一开始没有把数值总和再加给对方,以为这个是在不犯规的情况下才加的,直接错了好几遍。。。。。。

      1 #include <iostream>
      2 #include <stdio.h>
      3 #include <string.h>
      4 #include <algorithm>
      5 
      6 using namespace std;
      7 
      8 int AP,BP;
      9 int ap[100010],aq[100010];
     10 int a[100010];
     11 int hashh[100010];
     12 
     13 int main()
     14 {
     15     int n,m;
     16     int p,q;
     17     while(scanf("%d %d",&n,&m)!=EOF)
     18     {
     19         AP = 0 ;
     20         BP = 0 ;
     21         memset(hashh,0,sizeof (hashh));
     22         for(int i = 1 ; i <= n ; i++)
     23             scanf("%d",&a[i]);
     24         sort(a+1 ,a+1+n);
     25         int k = 1 ;
     26         bool flag = false ;
     27         for(int i = 1 ; i <= m ; i++)
     28         {
     29             bool flag1 = 0 ,flag2 = 0 ;
     30             int maxx = -1 ;
     31             int sum = 0 ;
     32             scanf("%d",&p);
     33             while(hashh[a[k]])//找当前局的目标球
     34                 k++ ;
     35             for(int i = 1 ; i <= p ; i++)
     36             {
     37                 scanf("%d",&ap[i]);
     38                 maxx = max(maxx,ap[i]) ;
     39                 if(ap[i] == a[k] && p == 1 ) flag1 = 1 ; //只有目标球入洞
     40             }
     41             scanf("%d",&q);
     42             for(int i = 1 ; i <= q ; i++)
     43             {
     44                 scanf("%d",&aq[i]);
     45                 sum += aq[i];
     46                 hashh[aq[i]] ++ ;
     47                 if(aq[i] == 0 ) flag2 = 1 ;//cue球进洞了
     48             }
     49             if(!flag)
     50             {
     51                 if(p == 0)
     52                 {
     53                     flag = true ;
     54                     BP += a[k];
     55                 }
     56                 else if(flag2 == 0 && flag1 == 0 )
     57                 {
     58                     flag = true ;
     59                     BP += maxx ;
     60                     BP += sum ;
     61                 }
     62                 else if(flag2 && p)
     63                 {
     64                     flag = true ;
     65                     BP += maxx;
     66                     BP += sum;
     67                 }
     68                 else if(hashh[a[k]] == 0)
     69                 {
     70                     flag = true ;
     71                     BP += sum;
     72                 }
     73                 else
     74                     AP += sum;
     75             }
     76             else
     77             {
     78                 if(p == 0)
     79                 {
     80                     flag = false ;
     81                     AP += a[k];
     82                 }
     83                 else if(flag2 == 0 && flag1 == 0 )
     84                 {
     85                     flag = false ;
     86                     AP += maxx ;
     87                     AP += sum ;
     88                 }
     89                 else if(flag2 && p)
     90                 {
     91                     flag = false ;
     92                     AP += maxx;
     93                     AP += sum;
     94                 }
     95                 else if(hashh[a[k]] == 0)//目标球未进洞
     96                 {
     97                     flag = false ;
     98                     AP += sum;
     99                 }
    100                 else
    101                     BP += sum;
    102             }
    103         }
    104         printf("%d : %d
    ",AP,BP);
    105     }
    106     return 0;
    107 }
    View Code
  • 相关阅读:
    61. 最长不含重复字符的子字符串
    60. 礼物的最大价值 (未理解)
    59. 把数字翻译成字符串
    58. 把数组排成最小的数
    57. 数字序列中某一位的数字 (不懂)
    spring data jpa 官方文档
    idea 编译报错 源发行版 1.8 需要目标发行版 1.8
    idea maven 依赖报错 invalid classes root
    solr
    spring boot 官方文档
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3734554.html
Copyright © 2020-2023  润新知