zoukankan      html  css  js  c++  java
  • csuoj-1900 锋芒毕露

                    

    Description

    小闪最近迷上了二刀流——不过他耍的其实是剑——新买了一个宝库用来专门存放自己收集的双剑。一对剑有两把,分只能左手用的和只能右手用的,各自有一个攻击力数值。虽然一对剑在小闪刚拿到时是一对,不过其实可以认为它们是独立的两把剑。一对剑的攻击力是左右两把剑的攻击力之和,小闪可以自由地搭配左右剑来练习二刀流。每次小闪得到一对新的双剑,他都可以去更新一次自己的双剑宝库,重新给每把剑配对。 小闪需要自己给每一把剑配对,然后他的智能宝库会提供宝库中攻击力最高的一对剑来给小闪练习;不过小闪其实是一个很低调的人,不喜欢锋芒毕露,希望自己练习时的双剑攻击力尽可能小——虽然不知道怎么改变宝库,但是他可以改变双剑的搭配。每次新得到一对剑,更新完宝库之后,小闪练习时用的剑可能就会发生变化。 请你求出每次更新宝库后小闪练习二刀流时的双剑攻击力。

    Input

    输入包含不超过10组数据。 对于每组数据,第一行一个整数N(1<=N<=100000),表示小闪前后共收集到了N对双剑;接下来N行,每行包含两个整数A和B(1<=A,B<=100),分别表示每次小闪收集到的一对剑的左手用剑和右手用剑的攻击力数值。 每组数据之后会有一个空行。 输入以一行一个整数0结束。

    Output

    对于每组数据,输出N行,每行一个整数,表示每次更新后小闪练习二刀流时的双剑攻击力值。 相邻两组数据之间输出一个空行。

    Sample Input

    3
    2 8
    3 1
    1 4
    
    3
    1 1
    2 2
    3 3
    
    0

    Sample Output

    10
    10
    9
    
    2
    3
    4

    就是最大值加最小值(堆排序)

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=105;  
     7 int n,a[N],b[N];  
     8 int main()  
     9 {  
    10     int x,y;  
    11     int flag=0;  
    12     while(~scanf("%d",&n)&&n)  
    13     {  
    14         if(flag) printf("
    ");  
    15         flag=1;  
    16         memset(a,0,sizeof(a));  
    17         memset(b,0,sizeof(b));  
    18         for(int i=0; i<n; i++)  
    19         {  
    20             scanf("%d%d",&x,&y);  
    21             a[x]++;
    22             b[y]++;  
    23             int l=0,r=100;  
    24             int ans=-1;  
    25             int cntl=a[l],cntr=b[r];  
    26             while(l<=100&&r>=0)  
    27             {  
    28                 if(cntl&&cntr)
    29                 {  
    30                     ans=max(ans,l+r);  
    31                 }  
    32                 if(cntl==cntr) 
    33                 {  
    34                     l++; 
    35                     r--;  
    36                     cntl=a[l]; 
    37                     cntr=b[r];  
    38                     continue;  
    39                 }  
    40                 if(cntl<cntr) 
    41                 {  
    42                     l++;  
    43                     cntr-=cntl;  
    44                     cntl=a[l];  
    45                 }  
    46                 else if(cntr<cntl)  
    47                 {  
    48                     r--;  
    49                     cntl-=cntr;  
    50                     cntr=b[r];  
    51                 }  
    52             }  
    53             printf("%d
    ",ans);  
    54         }  
    55     }  
    56     return 0;  
    57 }  
    58   
    59 
    60  
    View Code
  • 相关阅读:
    部分和问题
    区间k大数训练
    蓝桥杯基础练习-数列排序
    蓝桥杯基础练习-特殊的回文数
    蓝桥杯基础练习-回文数
    蓝桥杯基础练习-特殊的数字
    蓝桥杯基础练习-杨辉三角
    蓝桥杯基础练习-查找整数
    蓝桥杯题库基础训练-数列特征
    三道半平面交测模板题 Poj1474 Poj 3335 Poj 3130
  • 原文地址:https://www.cnblogs.com/csushl/p/9386568.html
Copyright © 2011-2022 走看看