Problem D. Soldiers Google APAC 2017 University Test Round C
来源:互联网 发布:兰州ps软件班 编辑:程序博客网 时间:2024/06/06 20:31
这种game theory的题目我是最不会的了T_T
如果存在一个soldier,A和D均为最大,那么先手第一轮选这个solder就一定会赢。
否则,将A最大的solder集合记为setA,将B最大的solder集合记为setB。那么这两个set双方都不会选。eg., 如果一方选择了setA中的一个solder,另一方选择setB中的一个solder,就不再存在符合条件的solder x,游戏结束。
如果Alice选了setA or setB中的solder,Alice和Bob的solder数量一样多。如果Bob选了setA or setB中的solder,Alice和 比Bob的solder数量多一个。所以该策略对双方都不利。
Then,把这些solder删除,结果不变。
如果除去这两个set的solder,没有solder可以选择,那么Alice也是输的,因为Alice必须要从中选一个,然而这是个必输 策略。
#include<iostream>#include<stdio.h>#include<cstdio>#include<string>#include<cmath>#include<stdlib.h>#include<algorithm>#include<string.h>#include<cstring>#include<vector>#include<queue>#include<map>using namespace std;//2017 RoundC Problem D. Soldiersint T;const int maxn=4010;int N;int A[maxn];int D[maxn];bool ans;bool deleted[maxn];vector<int> findmaxidx(int arr[]){ int maxi=0; vector<int>vec=vector<int>(); for(int i=0;i<N;i++) { if(deleted[i]==true) { continue; } if(maxi<arr[i]) { maxi=arr[i]; } } for(int i=0;i<N;i++) { if(deleted[i]==false&&arr[i]==maxi) { vec.push_back(i); } } return vec;}void solve(){ int cnt=N; while(cnt>0) { vector<int>idxa=findmaxidx(A); vector<int>idxb=findmaxidx(D); int selected[maxn]; memset(selected,0,sizeof(selected)); for(int i=0;i<idxa.size();i++) { selected[i]=1; for(int j=0;j<idxb.size();j++) { selected[j]=1; if(idxa[i]==idxb[j]) { ans=true; return; } } } int num=0; for(int i=0;i<N;i++) { num+=selected[i]; } if(num==cnt) { ans=false; return; } else { for(int i=0;i<idxa.size();i++) { deleted[idxa[i]]=true; cnt--; } for(int j=0;j<idxb.size();j++) { deleted[idxb[j]]=true; cnt--; } } }}int main(){ freopen("D-large-practice.in","r",stdin); freopen("output.txt","w",stdout); scanf("%d", &T); for(int ca=1;ca<=T;ca++) { memset(A,0,sizeof(A)); memset(D,0,sizeof(D)); memset(deleted,false,sizeof(deleted)); ans=false; scanf("%d",&N); for(int i=0;i<N;i++) { scanf("%d %d",&A[i],&D[i]); } solve(); printf("Case #%d: %s\n",ca,ans==true?"YES":"NO"); } return 0;}
0 0
- Problem D. Soldiers Google APAC 2017 University Test Round C
- Round C APAC Test 2017 Problem D. Soldiers
- Problem D. gMatrix Google APAC 2016 University Test Round C
- Problem A. Vote Google APAC 2017 University Test Round D
- Problem C. Evaluation Google APAC 2017 University Test Round C
- Problem C. Codejamon Cipher Google APAC 2017 University Test Round D
- Problem B. gBalloon Google APAC 2016 University Test Round D
- Problem B. gFiles Google APAC 2016 University Test Round C
- Problem A. gRanks Google APAC 2016 University Test Round C
- Problem C. gNumbers Google APAC 2016 University Test Round B
- Problem C. gCampus Google APAC 2016 University Test Round A
- Problem D. Stretch Rope Google APAC 2017 University Test Round D
- Problem B. Rain Google APAC 2017 University Test Round A
- [ Google APAC 2015 University Graduates Test ] Round C APAC Test
- Problem C. Jane's Flower Shop Google APAC 2017 University Test Round A
- Problem C. Watson and Intervals Google APAC 2017 University Test Round B
- Problem A. Monster Path Google APAC 2017 University Test Round C
- Problem B. Safe Squares Google APAC 2017 University Test Round C
- python2.7 or not 运算符规则
- PART IV 程序设计层 Chapter 8 高级程序设计语言
- mac 配置maven环境变量
- android关于ViewGroup的一些事一些情
- [SinGuLaRiTy-1001] Calculation Of The Shortest Path 最短路算法集锦
- Problem D. Soldiers Google APAC 2017 University Test Round C
- codevs天梯 矩阵取数游戏(昨天太忙没放题上来。。。)高精度+dp
- 《剑指offer》--- 链表中的倒数第k个结点 和 反转链表
- 杨辉三角简单解法
- Swift3.0-UILabel、UIButton、UIImageView创建以及使用
- 算法导论 第一课
- Linux基础(7)/文件系统操作与磁盘管理
- jquery整合到spring中
- Java中4大基本加密算法解析