2016SDAU课程练习一_1002

1.题目编号
1002
2.简单题意
田忌赛马,马增多
3.解题思路形成过程
参考群里
4.感想
有空再写

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<stdio.h>
#include<fstream>
using namespace std;

bool  cmp (const int &a,const int &b)
{return a>b;}

int main()
{
// ifstream cin ("nrj.txt");
    int n,temp;
    while(cin>>n&&n)
    {
        int win=0,lose=0;
        vector<int>  king,tian;
        for(int i=0;i<n;i++)
        {
            cin>>temp;
            tian.push_back(temp);
        }
        for(int i=0;i<n;i++)
        {
            cin>>temp;
            king.push_back(temp);
        }

        sort(tian.begin(),tian.end(),cmp); 
        sort(king.begin(),king.end(),cmp);

        //仅考虑最快和最慢的4匹马
        int tfront=0,tend=n-1,kfront=0,kend=n-1;
        while(tfront<=tend)//有马
        {
            //必定能赢,拿最慢的比最慢的
            if(tian[tend]>king[kend])
            {
                win++;
                tend--;
                kend--;
            }
            //必定要输,拿最慢的比最快的
            else if(tian[tend]<king[kend])
            {
                lose++;
                tend--;
                kfront++;
            }

            else//慢的两匹马速度一样,比快的
            {
                //必赢,拿最快的比最快的
                if(tian[tfront]>king[kfront])
                {
                    win++;
                    tfront++;
                    kfront++;
                }
                //可能平可能输
                else
                {
                    //输
                    if(tian[tend]<king[kfront])
                        lose++;
                    tend--;
                    kfront++;
                }
            }
        }
        cout<<200*(win-lose)<<endl;

    }
}

你可能感兴趣的:(2016SDAU课程练习一_1002)