中山大学校队内部选拔赛3.5【Horse Racing】------2015年2月10日

一:题目大意

给定A和B两人各自n条马,每一条马的能力值不同,现在由裁判C主持比赛。每一次比赛A和B各自出一条马,能力值大的一方会获胜。现在规定如果当进行到最后时A和B打成平手的话我们就说C赢。现在问怎样才能保证C赢?

二:题目分析

本题主要考查贪心(不太好想)策略。我们首先可以得到一个起码的规律那就是如果n是奇数,那么这个肯定不会赢。当n时偶数时:

我们要想C赢,那么A和B需要各自赢一半。现在我们对于A的输入的马能力值定义为:a1,a2,a3······an.B的输的能力值定义为:b1,b2,·····bn。

我们可以先把A的马分成均分成两半,设前一半中马的能力的最大值为aj,后一半中马的能力的最小值为ak,现在我们把这两匹马进行交换。如此往复进行,直到前一半的马全部比后一半的马的能力值小为止。那么我们同样可以采取类似的方法对B的马进行处理,使得前一半的马的能力值比后一半的能力值高。设更新得到的状态是:

a1‘,a2‘,······an‘和b1‘,b2‘·····bn‘。

现在我们对于A和B的前一半马进行分析:

我们首先找出A和B前一半的马的能力的最大值分别为:ak‘和bj‘。我们把ak‘和aj‘进行交换,使得前一半的值从A到B各自对应。

同理我们使得后一半中同样从A到B各自对应。

到这里我们可以得到如果前一半中或者后一半中存在一个对应值不满足要求,那么肯定C不会赢。

对应于以上的处理,我们其实可以采取一个快排,然后让A的前一半和B的后一半进行比较,A的后一半和B的前一半进行比较。最后得出答案。

三:AC代码

#include<iostream>
#include<algorithm>
using namespace std;
int a[100],b[100];
int n;
 int main()
 {
    while(cin>>n)
    {
       for(int i=0;i<n;i++)
       {
           cin>>a[i];
       }
       for(int i=0;i<n;i++)
        cin>>b[i];
       sort(a,a+n);
       sort(b,b+n);
       int ok=1;
       if(n%2==1)
       {
           ok=0;
       }
       for(int i=0;i<n/2;i++)
        if(a[i]>b[i+n/2])
        ok=0;
       for(int i=0;i<n/2;i++)
        if(b[i]>a[n/2+i])
        ok=0;
       if(!ok)
        cout<<"NO"<<endl;
       else cout<<"YES"<<endl;
    }
    return 0;
 }

四:总结

博弈问题需要好好体会

时间: 2024-07-28 12:48:49

中山大学校队内部选拔赛3.5【Horse Racing】------2015年2月10日的相关文章

中山大学校队内部选拔赛试题3.1【Factorial Factors】--------2015年2月9日

一:题目大意 当给定一个数时,先求出它的所有因子N1,N2······Nk,然后求出它的因子对应的因子的个数n1,n2·····nk,并求出最终结果S=n1^3+n2^3+n3^3+·····+nk^3. 二:题目分析 本题的数据范围是N<2^31.如果对于每一趟直接判断时间复杂度将会很高.因此我们需要做预处理,先求出在最大范围内所有的质数. 对于每一个质数p,它的因子只有1和p本身,那么S(p)=1+2^3=9. 对于数字x=p^k,我们可以得知它有1,p,,,,p^k这么多因子,那么S(x)

中山大学校队内部选拔赛试题试题2【New Year Gift】--------2015年2月8日

一 题意分析 本题就是说给定n种类型的珍珠,每一种珍珠都有固定的数目.现在我们需要串需要M种不同类型珠子的珍珠链,现在问我们最多可以组成多少珍珠链? 二 题目分析 这道题主要考查二分思想的运用.对于二分法我们首先需要找到上界与下界,这里的下界我们可以设置为0,上界可以设定为最大(2000000表示一个珍珠链只需要一个珍珠),我们在进行二分,如何二分我们可以定义一个变量sum,不同类型珍珠数量的数组num[],中间变量Mid.对于每一种类型的珍珠,如果num[i]>mid则让sum+=mid,否则

中山大学校队选拔赛第一章题1【紧急逃离Emergent escape】----2015年1月26日

一: 题意描述 二:题目分析 本题的大致意思是讲:在给定的一个大圆上挖去很多圆(这些圆有的在大圆里面,有的在大圆外面,有的与圆相加),凡是被圆占据的部分则不能通行. 现在给定两个点,(lifeship和controlling room)如果两者能够到达的话表示能够Escape,否则就只有Die hard. 本题的主要考查图论知识和计算几何方面的知识.首先我们对于这个问题需要建模.我们首先可以把这个大圆看成单独的一个区域.现在的问题就是在整个大圆内找不到一条线可以让lifeship和control

中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日

一:题目大意 本题通过给定三个数组S0,P,S,其中S0是1到2n的一个排列,P具有2n个整数,且满足: 数组S是把数组S0中所有奇数元素全部删除并将所有偶数元素除以2并按照原来的相对顺序进行排列而得. 现在给定数组S和数组P,我们需要反求数组S0. 二:题目分析 我们通过对数组P的递推式分析可知:当数组S0的元素是偶数时,这个元素所对应的Pi的值一定等于i.当数组S0的元素为奇数时,我们可以知道对应的Pi一定不等于i.那么我们可以先对数组P扫一遍,把存在Pi=i的元素全部填好,然后再对数组P重

中山大学校队选拔赛第一章题4【简单数迷Simple Kakuro】-------2015年1月28日

一:题意描述 本题就是给定一个迷宫,其中第一行和第一列都给定了数值.现在我们的任务就是需要把剩余的空格用1-9的数字把它填满,并且每行每列数值之和需要和行列标定的值相等.问最后是否可行,如果有多种方案需要输出一种方案. 二 :题目分析 本题主要考查DFS当中剪枝技巧的利用以及DFS的方向规划问题. 首先我们可以根据题目已知信息得出行之和必须等于列之和.(第一次剪枝) 然后我们可以根据每一个数字不能在同一行或者同一列重复出现[设定标记]进行剪枝(第二次剪枝) 对于如果某一行(一列)数值还没有填满但

中山大学校队选拔赛第一章题1【计算生成树】------2015年1月23日

1.1问题描述 1.2问题分析 本题主要考查图论中生成树及组合数学的求法.通过观察我们可以发现当输入为n时,我们一共有(5*n-n)=4n个点.通过思考我们可以知道,要想求得生成树,我们必须使所有五角形的圈全部破掉.那么我们可以思考: 如果对于一个五角形而言,它的每一条边都不删除,那么我们可以发现这必定不能构成生成树,因为这会导致在五角形内任意两个点会至少含有两条路径,不符合生成树的含义.所以我们可以得出如下结论: (1)对于有边数为n的回圈,我们可以发现一共有4n个点,共有5n条边.根据生成树

中山大学选拔赛第一章题1【计算生成树】------2015年1月23日

1.1问题描述 1.2问题分析 本题主要考查图论中生成树及组合数学的求法.通过观察我们可以发现当输入为n时,我们一共有(5*n-n)=4n个点.通过思考我们可以知道,要想求得生成树,我们必须使所有五角形的圈全部破掉.那么我们可以思考: 如果对于一个五角形而言,它的每一条边都不删除,那么我们可以发现这必定不能构成生成树,因为这会导致在五角形内任意两个点会至少含有两条路径,不符合生成树的含义.所以我们可以得出如下结论: (1)对于有边数为n的回圈,我们可以发现一共有4n个点,共有5n条边.根据生成树

(hdu step 1.3.3)Tian Ji -- The Horse Racing(田忌赛马)

题目: Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4411 Accepted Submission(s): 1069   Problem Description Here is a famous story in Chinese history. "That was about 2

从内部架构大调整看百度2015年的战略方向

调整 李彦宏发内部邮件称,将现有业务群组和事业部整合为三大事业群组. 大概的调整是这样的: 1.移动云事业部和LBS事业部合并为移动服务事业群组,由副总裁李明远.副总裁刘骏负责,刘骏转向李明远汇报; 2.新业务群组.用户消费业务群组.国际化事业部合并为新兴业务事业群组,由总裁张亚勤.副总裁王湛负责,王湛转向张亚勤亚勤汇报,同时Fellow孙云丰和执行总监胡勇转向张亚勤汇报; 3.移动云事业部的搜索底层基础技术部分和移动搜索联盟业务并入搜索业务群组,连同团购业务,继续由高级副总裁向海龙.副总裁王海