zoukankan      html  css  js  c++  java
  • 每日一练之贪心算法(P2587)

    洛谷——P2587 [ZJOI2008]泡泡堂

     两队人马进行比赛, 战斗力值各有差异, 如果一方获胜得两分,战平各得一分,失败不得分,求可取得的最佳战绩与最差战绩。

            思路:1)最强的打得过最强的就直接上;

                       2)最弱的打得过最弱的直接上;

                       3)我方最弱的打不过对方最弱的,送人头消耗对方最强的兵。这样我方就有效保留了一位战力强的兵。为什么是有效,因为已经打不过了,打最弱是挂,打最强也是挂呀,弱者也要死得其所。。。如果此时是打平呢?分析下得失,如果送人头消耗了最强的兵,则我方最强的兵至少对战最弱的兵可以获胜,这就更有优势;比如1,4与1,4;打平不如打消耗。

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 const int MAX=100001;
     5 int fight(int a[],int b[],int n,bool high);
     6 
     7 int main()
     8 {
     9     int a[MAX],b[MAX];
    10     int n;
    11     cin>>n;
    12     for(int i=0;i<n;i++)    cin>>a[i];
    13     for(int i=0;i<n;i++)    cin>>b[i];
    14     sort(a,a+n);
    15     sort(b,b+n);
    16     cout<<fight(a,b,n,true)<<" "<<fight(b,a,n,false)<<endl;     //反复提交n次发现不要求分行,mmm
    17 
    18     return 0;
    19 }
    20 
    21 int fight(int a[],int b[],int n,bool high)
    22 {
    23     int iLeft,iRight,jLeft,jRight,win;
    24     iLeft=jLeft=0;
    25     win=0;
    26     iRight=jRight=n-1;
    27     while(iLeft<=iRight&&jLeft<=jRight)
    28     {
    29         if(a[iRight]>b[jRight])        
    30         {
    31             win+=2;
    32             iRight--;
    33             jRight--;
    34         }
    35         else if(a[iLeft]>b[jLeft])
    36         {
    37             win+=2;
    38             iLeft++;
    39             jLeft++;
    40         }
    41         else if(a[iLeft]==b[jRight])        //相等则说明剩下的数都是相等的,即打平
    42         {
    43             win+=(iRight-iLeft+1);
    44             break;
    45         }
    46         else    
    47         {
    48             iLeft++;
    49             jRight--;
    50         }
    51     }
    52     if(high)    return win;        //如果high为真,求a队最高分
    53     else    return (2*n-win);    //如果high为假,求a队最低分,此时b队得分最高,总分为2*n
    54 }

    提交了n遍就是不过,出现Wrong Answer Too short on line 1,后来对比别人的才发现输出时换行导致与要求格式不同。

    小结:

    1、提交前先上IDE确认能否通过;

    2、不要盲目提交,分析原因 ( 比对结果格式/题目要求,分析对比他人结果);

    3、方法总比问题多,放空思绪, 歇会再来。

  • 相关阅读:
    天府大讲堂:5G时代的物联网发展趋势与产业变革
    一步步教你轻松学奇异值分解SVD降维算法
    一步步教你轻松学支持向量机SVM算法之案例篇2
    一步步教你轻松学支持向量机SVM算法之理论篇1
    一步步教你轻松学主成分分析PCA降维算法
    一步步教你轻松学关联规则Apriori算法
    一步步教你轻松学K-means聚类算法
    一步步教你轻松学逻辑回归模型算法
    一步步教你轻松学朴素贝叶斯模型实现篇2
    一步步教你轻松学朴素贝叶斯模型算法理论篇1
  • 原文地址:https://www.cnblogs.com/maxonzou/p/10629020.html
Copyright © 2011-2022 走看看