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

    After the fourth season Sherlock and Moriary have realized the whole foolishness of the battle between them and decided to continue their competitions in peaceful game of Credit Cards.

    Rules of this game are simple: each player bring his favourite (n)-digit credit card. Then both players name the digits written on their cards one by one. If two digits are not equal, then the player, whose digit is smaller gets a flick (knock in the forehead usually made with a forefinger) from the other player. For example, if (n = 3), Sherlock's card is 123 and Moriarty's card has number 321, first Sherlock names 1 and Moriarty names 3 so Sherlock gets a flick. Then they both digit 2 so no one gets a flick. Finally, Sherlock names 3, while Moriarty names 1 and gets a flick.

    Of course, Sherlock will play honestly naming digits one by one in the order they are given, while Moriary, as a true villain, plans to cheat. He is going to name his digits in some other order (however, he is not going to change the overall number of occurences of each digit). For example, in case above Moriarty could name 1, 2, 3 and get no flicks at all, or he can name 2, 3 and 1 to give Sherlock two flicks.

    Your goal is to find out the minimum possible number of flicks Moriarty will get (no one likes flicks) and the maximum possible number of flicks Sherlock can get from Moriarty. Note, that these two goals are different and the optimal result may be obtained by using different strategies.

    Input

    The first line of the input contains a single integer (n (1 ≤ *n* ≤ 1000)) — the number of digits in the cards Sherlock and Moriarty are going to use.

    The second line contains (n) digits — Sherlock's credit card number.

    The third line contains (n) digits — Moriarty's credit card number.

    Output

    First print the minimum possible number of flicks Moriarty will get. Then print the maximum possible number of flicks that Sherlock can get from Moriarty.

    Examples

    Input

    3
    123
    321
    

    Output

    0
    2
    

    Input

    2
    88
    00
    

    Output

    2
    0
    

    Note

    First sample is elaborated in the problem statement. In the second sample, there is no way Moriarty can avoid getting two flicks.

    题意

    Sherlock和Moriarty有(n)张卡片,每个卡片上有一个数字,现在有Sherlock和Moriarty 两个人在比较这些卡片上的数字大小,小的数字需要接受惩罚,Sherlock的卡片顺序是固定的,Moriarty的卡片顺序可以随意变动,求Moriarty的最小接受惩罚次数是多少,Sherlock最大惩罚对方的次数是多少

    思路

    将两个字符串转换成数组,排序比较就行了

    求Moriarty的最小接受惩罚次数的时候,可以反着求:求Moriarty的卡片数字不小于Sherlock的张数,然后用(n)减去即可

    代码

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define ms(a,b) memset(a,b,sizeof(a))
    const int inf=0x3f3f3f3f;
    const ll INF=0x3f3f3f3f3f3f3f3f;
    const int maxn=1e6+10;
    const int mod=1e9+7;
    const int maxm=1e3+10;
    using namespace std;
    int s[maxn],m[maxn];
    int nums[100],numm[100];
    int main(int argc, char const *argv[])
    {
        #ifndef ONLINE_JUDGE
            freopen("in.txt", "r", stdin);
            freopen("out.txt", "w", stdout);
            srand((unsigned int)time(NULL));
        #endif
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n;
        string s1,s2;
        cin>>n;
        cin>>s1>>s2;
        for(int i=0;i<n;i++)
            s[i]=s1[i]-'0',m[i]=s2[i]-'0';
        sort(s,s+n);
        sort(m,m+n);
        int pos1=0;
        int pos2=0;
        int res1=0;
        int res2=0;
        for(int i=0;i<n;i++)
        {
            if(pos1>=n&&pos2>=n)
                break;
            while(pos1<n&&m[pos1]<s[i])
                pos1++;
            while(pos2<n&&m[pos2]<=s[i])
                pos2++;
            if(pos1<n)
                res1++,pos1++;
            if(pos2<n)
                res2++,pos2++;
        }
        cout<<n-res1<<endl;
        cout<<res2<<endl;
        #ifndef ONLINE_JUDGE
            cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<" s."<<endl;
        #endif
        return 0;
    }
    
  • 相关阅读:
    将博客搬至CSDN
    IDEA安装对应版本的lombok才生效
    shift键复选dataGrid的记录时多余的文本总被选择了。
    git 导出新修改的文件
    svn老鸟转用git必须理解的概念
    java中Long类型和long类型的大小比较
    eclipse反编译插件jadClipse安装使用教程
    js闭包
    java泛型讲解
    常用加密解密算法【RSA、AES、DES、MD5】介绍和使用
  • 原文地址:https://www.cnblogs.com/Friends-A/p/11569436.html
Copyright © 2011-2022 走看看