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\n",AP,BP);
105 }
106 return 0;
107 }

时间: 2024-10-07 05:06:27

ZOJ 3757 Alice and Bob and Cue Sports(模拟)的相关文章

ZOJ 3666 Alice and Bob (SG博弈)

题目: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3666 题意: 给一个有向图,然后A和B轮流移动棋子,棋子在每一个位置可以重叠,当某人不能走时,输! 问A和B谁赢 方法: 显然每一局游戏都是独立的,对每一局游戏异或即可 每一局游戏的结果可以用SG求,记忆化搜索之 1 int dfs(int x) 2 { 3 if (sg[x] != -1) return sg[x]; 4 bool vis[maxn]; 5 me

zoj 3666 Alice and Bob , SG函数

题意: 在一个有向无环图上,有若干玩具,每人每次只能将一个玩具移动一步,玩具被移动到终点n将不能再被移动了,最后不能移动者输. 组合博弈 SG函数应用 #include<vector> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 10000 + 100; int SG[maxn]; vector<int>

ZOJ 3529 A Game Between Alice and Bob (分解质因数+Nim博弈)

A Game Between Alice and Bob Time Limit: 5 Seconds      Memory Limit: 262144 KB Alice and Bob play the following game. A series of numbers is written on the blackboard. Alice and Bob take turns choosing one of the numbers, and replace it with one of

codeforces_346A Alice and Bob(数学)

题目链接:http://codeforces.com/problemset/problem/346/A 参考链接:http://blog.csdn.net/loy_184548/article/details/50174615 感受到数学在博弈论中的强大. 考虑最后终止状态的序列-无法取出任意两个数他们的差值不存在这个序列中:那么这必定是个首项等于公差的等差序列 而这个序列是 d 2d 3d....,因此可以通过a[1] a[2] a[3] ...的最大公约数得到 然后计算有几个数没在数组中,判

HDU4268 Alice and Bob 【贪心】

Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2869    Accepted Submission(s): 926 Problem Description Alice and Bob's game never ends. Today, they introduce a new game. In this

博弈问题-Alice与Bob拿牌游戏

Description Bob and Alice play a game, and Bob will play first. Here is the rule of the game: 1) There are N stones at first; 2) Bob and Alice take turns to remove stones. Each time, they can remove p^k stones. p is prime number, such as 2, 3, 5, ...

Alice and Bob

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Description It is so boring in the summer holiday, isn't it? So Alice and Bob have invented a new game to play. The rules are as follows. First, they get a se

HDU 4111 Alice and Bob (博弈)

Alice and Bob Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1799    Accepted Submission(s): 650 Problem Description Alice and Bob are very smart guys and they like to play all kinds of games i

HDU 4268 Alice and Bob(贪心+multiset)

HDU 4268 题意:Alice与Bob在玩卡片游戏,他们每人有n张卡片,若Alice的一张卡片长与宽都不小于Bob的一张卡片,则Bob的卡片就会被盖住,一张卡片只可以使用一次,且不可旋转求Alice最多可以盖住多少张Bob的卡片. 思路:记录两人卡片情况,并按照长度将两人卡片分别降序排序.遍历两人的卡片,将长度小于Alice的卡片长度的Bob卡片的宽度插入multiset中,在multiset中找到小于等于Alice卡片宽度的第一个数,将这个数给消去且答案+1.//贪心法自行发挥即可. co