当前位置:首页 > 题解目录 > 正文内容

【题解】钟神赛车

亿万年的星光11个月前 (03-28)题解目录664

【题目描述】

钟神近来编码劳累,想骑车风光一番,于是找某君骑自行车比赛。已知某君和钟神的每辆自行车的速度,钟神赢一场得50银两银子,输一场赔50银两,平局不挣也不赔。钟神可以随意安排高中低档自行车的出场数序,假设钟神体力无限无损耗求钟神最多能挣多少钱。

【输入描述】

多行测试数据,每行包含一个整数n和2n个32位正整数,第一个n表示自行车的数量,

之后的n个32位整数表示某君自行车的速度,

最后的n个32位整数表示钟神的自行车的速度

【输出描述】

钟神可以随意安排自行车的出场数序。输出钟神最多能挣多少钱,结果一定在32位整数的范围内

【样例输入】

3 2 1 3 2 2 3
3 2 1 3 1 1 3

【样例输出】

50
0



【参考代码】

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
   int a[1100],b[1100];
   int n;
   while(cin>>n&&n)
   {
       for(int i=0;i<n;i++)
       {
           cin>>a[i];
       }
       for(int j=0;j<n;j++)
       {
           cin>>b[j];       
            
       }
       sort(a,a+n);
       sort(b,b+n);
       int count=0;
       int money=0;
       for(int i=0,j=0;i<n;)
       {
           if(a[i]<b[j])
           {
               i++;
               j++;
               //count++;
               money+=50;
           }
           else
           {
               i++;
           }
       }
       cout<<money<<endl;
        
        
   }
   return 0;
     
}



这是一个典型的贪心算法问题,类似于田忌赛马的策略。目标是通过合理安排钟神和某君的自行车出场顺序,使得钟神的总盈利最大化。每场比赛的规则如下:

  • 钟神的自行车速度 > 某君的自行车速度:钟神赢得50银两。

  • 钟神的自行车速度 < 某君的自行车速度:钟神输掉50银两。

  • 钟神的自行车速度 = 某君的自行车速度:平局,不盈利不亏损。

解题思路

  1. 排序:首先将某君和钟神的自行车速度分别排序。排序的目的是为了后续的贪心匹配策略。

    • 某君的自行车速度数组 a 按升序排序。

    • 钟神的自行车速度数组 b 按升序排序。

  2. 贪心策略

    • 如果 b[j] > a[i],说明钟神的当前自行车可以赢某君的当前自行车,因此盈利增加50银两,同时移动两个指针 i++ 和 j++

    • 如果 b[j] <= a[i],说明钟神的当前自行车无法赢某君的当前自行车,此时应该用钟神的最慢自行车去消耗某君的当前自行车(类似于田忌赛马中的“用下等马对上等马”策略),因此只移动 i++,不移动 j

    • 使用两个指针 i 和 j 分别指向某君和钟神自行车速度数组的起始位置。

    • 比较 a[i] 和 b[j]

    • 这样做的目的是尽可能多地让钟神的自行车赢得比赛,同时避免不必要的损失。

  3. 边界情况

    • 如果所有钟神的自行车速度都小于某君的自行车速度,则钟神无法盈利,总盈利为0。

    • 如果所有钟神的自行车速度都大于某君的自行车速度,则钟神可以赢得所有比赛,总盈利为 n * 50



    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【题解】游戏

    【题目描述】上了半天的物理数学课,大家的脑子有点转不动了,下午的课表似乎看透了同学们的 心思,第一节就安排了体育课,CZ 中学的课表真是太有爱了,赞一个!午间休息后,文体 委员小 S 喊大家到教室外的...

    学生分组

    【题目描述】有N组学生,给出初始时每组中的学生个数,再给出每组学生人数的上界R和下界L(L≤R),每次你可以在某组中选出一个学生把他安排到另外一组中,问最少要多少次才可以使N组学生的人数都在[L,R]...

    最大数max

    【题目描述】已知:m=max(a,b,c)max(a+b,b,c)×max(a,b,b+c)m=max(a,b,c)max(a+b,b,c)×max(a,b,b+c)输入a,b,c,求m。把求三个数的...

    【题解】红与黑

    【题解】红与黑

    【题目描述】有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。【输入】包括多组数据。每...

    【题解】山区建小学

    【题目描述】政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0<i<...

    求Π的值

    【题目描述】根据公式:arctanx(x)=x−x^3/3+x^5/5−x^7/7+…和π=6arctanx(1/√3).定义函数arctanx(x),求当最后一项小于10^(−6)时π的值。【输入描...