• 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;
    
    
    }
    
  • 相关阅读:
    iOS开发之MapKit
    iOS开发之代码截图
    iOS开发之CoreLocation(二)
    iOS开发之CoreLocation(一)
    iOS开发之静态库.a的制作
    iOS开发之通讯录 AddressBook
    iOS开发之ARC MRC混编
    iOS开发之蓝牙(一)GameKit
    java学习笔记之转换流
    iOS开发之蓝牙(二)CoreBluetooth
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754902.html
Copyright © 2020-2023  润新知