• POJ 2051 Argus


    /* 题目要求按注册者报告返回的时间顺序输出注册者的
    * 编号,如果同一时间按出现,则先输出序号小的
    * 大体思路:这个方法有点慢,先对注册者排序,然后每次输出
    * 最先返回的,用find_min来找到最先返回的,复杂度有点高。
    */

    #include<iostream>
    #include
    <algorithm>
    using namespace std;
    struct Node{
        
    int val;
        
    int reg;
        
    int sum;
    }node[
    10000];
    int n,k;
    int find_min()
    {
        
    int min = node[0].sum;
        
    int pos = 0;
        
    for(int i=1;i<n;++i)
            
    if(min>node[i].sum)
            {
                min 
    = node[i].sum;
                pos 
    = i;
            }
        
    return pos;
    }
    int cmp(const Node& a,const Node& b)
    {
        
    return a.reg<b.reg;
        }

    int main()
    {
        
    char str[15];
        
    int rgt,value,index,i,j;
        n 
    = 0;
        
    while(1)
        {
            scanf(
    "%s",str);
            
    if(!strcmp(str,"#"))
                
    break;
            scanf(
    "%d%d",&node[n].reg,&node[n].val);    
            node[n].sum 
    = node[n].val;
            
    ++n;
        }
        sort(node,node
    +n,cmp);
        scanf(
    "%d",&k);
        
    for(i=0;i<k;++i)
        {
            index 
    = find_min();
            node[index].sum 
    +=node[index].val;
            printf(
    "%d\n",node[index].reg);
        }
        
    return 0;
    }

  • 相关阅读:
    【洛谷P2839】middle
    【洛谷P2495】消耗战
    【CF1438D】Powerful Ksenia
    【CF878E】Numbers on the blackboard
    【洛谷U138580】简单的打击
    【洛谷P4774】屠龙勇士
    【GMOJ5363】生命之树
    【YbtOJ#20075】区间异或
    【YbtOJ#20077】计划带师
    hdu 2688
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1662788.html
Copyright © 2020-2023  润新知