• hduoj1052田忌赛马(贪心好题略难,思维,模拟)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1052

    想了好长时间终于搞明白了,从大到小一一匹配,==时候到底打还是用最慢消耗情况太多,最麻烦要分清况考虑!

    1.>,最快打最快,直接打加分(不错位,+200)

    2.<最慢耗最快,减分(错位,-200)

    3.相等时3种情况

    3.1,1个相等1个>时,最慢>最慢可加分(不错位,+200)

    //4 5

    //3 5

    3.2.1,1个相等1个<=时,用最慢耗最快(错位,-200)

    //2 5 //3 5

    //3 5 //3 5

    3.2.2,1个相等1个<=时,用最慢耗最快(错位,但不减分!)(最关键!!麻烦)

    //5 5

    //5 5

    终于A了我的天哪!

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 const int maxn=1e6+5;
     5 int a[maxn],b[maxn];
     6 
     7 int main()
     8 {
     9     ios::sync_with_stdio(false); cin.tie(0);
    10 
    11     int n;
    12     while(cin>>n && n)
    13     {
    14         for(int i=1;i<=n;i++) cin>>a[i];
    15         for(int i=1;i<=n;i++) cin>>b[i];
    16 
    17         sort(a+1,a+1+n);
    18         sort(b+1,b+1+n);
    19         int imin=1,jmin=1;
    20         int imax=n,jmax=n;
    21         int s=0;
    22         while(imin<=imax && jmin<=jmax)
    23         {
    24             if(a[imax]>b[jmax])//>用最快直接打
    25             {
    26                 s+=200;
    27                 imax--;
    28                 jmax--;
    29             }
    30             else if(a[imax]<b[jmax])//<用最慢直接打
    31             {
    32                 s-=200;
    33                 imin++;
    34                 jmax--;
    35             }
    36             else//==时候最麻烦,分情况讨论
    37             {
    38                 if(a[imin]>b[jmin])//最慢>最慢可加分,直接打
    39                 {
    40                     s+=200;
    41                     imin++;
    42                     jmin++;
    43                 }
    44                 else//<和==情况一样,用最慢去耗它的最快(但是去耗的时候减不减分还要分情况!)
    45                 {
    46                     if(a[imin]<b[jmax]) s-=200;//这句很关键,相等时特殊情况
    47                     imin++;                    //这种最最麻烦最最难想!
    48                     jmax--;                 
    49                 }
    50             }
    51         }
    52         cout<<s<<endl;
    53     }
    54 
    55     return 0;
    56 }

    完。

  • 相关阅读:
    vue table 固定首列和首行
    手机号隐藏中间4位变成****
    微信小程序填坑之page[pages/XXX/XXX] not found.May be caused by
    table表格固定前几列,其余的滚动
    大文件切片功能
    js如何判断数字是否有小数
    获取当前时间前后6个月的时间数组
    为你的mail server增加SPF记录
    给hmailserver添加DKIM签名
    HttpWatch工具简介及使用技巧
  • 原文地址:https://www.cnblogs.com/redblackk/p/9967523.html
Copyright © 2020-2023  润新知