• HDU 4393 Throw nails


    http://acm.hdu.edu.cn/showproblem.php?pid=4393

    题意:有n个人,i-th人第一秒速度为Fi/s,之后Si/s。每一秒末,跑在最前面的人消失,如果有多个人同时在最前面,id最小的人消失。输出消失顺序。

    题解:因为Si最多只有100个,所以对Si进行操作。采用优先队列,相同Si的压进相同的队列。求每一次最大的Fi+Si*t。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <queue>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 const int maxn=50010;
    10 
    11 struct node{
    12     int F,S,id;
    13     bool operator<(const node &x) const {
    14         if(F!=x.F) return F<x.F;
    15         return id>x.id;
    16     }
    17 }P[maxn];
    18 
    19 priority_queue<node> pque[110];
    20 
    21 int main()
    22 {
    23    //freopen("/Users/apple/Desktop/codeblocks/D.txt","r",stdin);
    24 
    25     int T,n;
    26     scanf("%d",&T);
    27     for(int ca=1;ca<=T;ca++)
    28     {
    29         scanf("%d",&n);
    30         for(int i=0;i<n;i++)
    31         {
    32             scanf("%d%d",&P[i].F,&P[i].S);
    33             P[i].id=i+1;
    34             pque[P[i].S].push(P[i]);
    35         }
    36         int t;
    37         node tmp;
    38         int mtime=0;
    39         int ide;
    40         int k;
    41         printf("Case #%d:
    ",ca);
    42         int flag=1;
    43         int flag1=n;
    44         while(n--)
    45         {
    46             flag++;
    47             t=-1;
    48             for(int i=1;i<=100;i++)
    49             {
    50 
    51                 if(!pque[i].empty())
    52                 {
    53                     tmp=pque[i].top();
    54                     if(tmp.F+tmp.S*mtime>t)
    55                     {
    56                         t=tmp.F+tmp.S*mtime;
    57                         ide=tmp.id;
    58                         k=i;
    59                     }
    60                     else if(tmp.F+tmp.S*mtime==t)
    61                     {
    62                         if(tmp.id<ide)
    63                         {
    64                             ide=tmp.id;
    65                             k=i;
    66                         }
    67                     }
    68                 }
    69             }
    70             if(!pque[k].empty()) pque[k].pop();
    71             if(flag==flag1+1) printf("%d
    ",ide);
    72             else printf("%d ",ide);
    73             mtime++;
    74         }
    75     }
    76     return 0;
    77 }
  • 相关阅读:
    Oracle JDBC:驱动版本区别与区分 [转]
    项目管理: Alpha,Beta,RC,GA,Release
    J2EE: JCA (Java Connector Architecture) [转]
    HTML:Event [转]
    JavaScript:inherits
    HTML5 Canvas
    Selenium1 Selenium2 WebDriver
    HTML5 Canvas:初始Canvas
    License友好的前端组件合集
    JavaSe:Comparator
  • 原文地址:https://www.cnblogs.com/der-z/p/3740082.html
Copyright © 2020-2023  润新知