zoukankan      html  css  js  c++  java
  • CF777B:Game of Credit Cards(贪心)

      这题和田忌赛马类似,我做这题的时候,被卡了2个小时,还是太菜了。

      题目要求的是第二个人输的最小次数和第一个人输的最多次数。

      求第二个人输的最小次数,正面不好求,可以通过反 面来求,即求第二个人打赢和打平第一个人的最大次数,用总比赛次数减去即可。然后求第一个人输的最多次数,就是相当于求第二个人赢的最多次数。

    #include<bits/stdc++.h>
    using namespace std;
    char s[1005];
    int a[1005],b[1005];
    int main()
    {
        int n,ans1=0;
        cin>>n>>s;
        for(int i=0;i<n;i++) a[i]=s[i];
        cin>>s;
        for(int i=0;i<n;i++) b[i]=s[i];
        sort(a,a+n);
        sort(b,b+n);
        for(int i=0,j=0;i<n&&j<n;)//求第二个人打赢和打平的最大次数
        {
            while(j<n)
            {
                if(a[i]<=b[j])//打赢或打平就让下2个数比
                {
                    i++;
                    j++;
                    ans1++;
                    break;
                }
                else//输了的话i不用动,仍然指向原数,j往后走,找更大的数来和a[i]比
                    j++;
            }
    
        }
        cout<<n-ans1<<endl;
        ans1=0;
        for(int i=0,j=0;i<n&&j<n;)//求第二个人打赢的最大次数,就少判断了一个打平的情况
        {
            while(j<n)
            {
                if(a[i]<b[j])
                {
                    i++;
                    j++;
                    ans1++;
                    break;
                }
                else
                    j++;
            }
        }
        cout<<ans1<<endl;
        return 0;
    
    
    }
    
  • 相关阅读:
    团队作业3--需求改进&系统设计
    需求分析&原型设计
    团队项目作业1-团队展示
    结对编程
    APP案例分析之华为浏览器
    四则运算生成器做法思路
    关于PHP使用GD库生成的验证码无法在别处显示
    第二次课程心得
    两个程序代码
    5.8下午
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754903.html
Copyright © 2011-2022 走看看