zoukankan      html  css  js  c++  java
  • hdu4020简单想法题

    题意:
          给你一些人,这些人有很多广告,每个广告有自己的点击率和长度,每次有m组询问,问每个人点击率前K名的广告的总长度是多少.


    思路:

          数据很大,很容易超时,总的想法还是先sort按照人,其次是点击率,这样就可以o(m)的时间吧每个广告的点击率排名搞定,然后在按照排名sort一变,就能用O(m)的时间吧sum[1--k]的答案打表出来,然后用O(1)的时间输出q组询问的答案就行了,刚开始因为多写了一个memset(50w的);各种超时,结果去掉之后3000多ac的..


    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    
    using namespace std;
    
    typedef struct
    {
       int id ,pm ,cli;
       __int64 l;
    }NODE;
    
    NODE node[500000+100];
    __int64 ans[500000+100];
    
    bool camp1(NODE a ,NODE b)
    {
       return a.id < b.id || a.id == b.id && a.cli > b.cli;
    }
    
    bool camp2(NODE a ,NODE b)
    {
       return a.pm < b.pm;
    }
    
    
    int main ()
    {
       int n ,m ,q ,i ,j ,t ,cas = 1;
       scanf("%d" ,&t);
       while(t--)
       {
          scanf("%d %d %d" ,&n ,&m ,&q);
          for(i = 1 ;i <= m ;i ++)
          scanf("%d %d %I64d" ,&node[i].id ,&node[i].cli ,&node[i].l);
          sort(node + 1 ,node + m + 1 ,camp1);
          int k = 1 ,maxn = 0;
          for(i = 1 ;i <= m ;)
          {
             int aa = 1;
             while(node[i].id == k)
             {
                node[i].pm = aa++;
                i++;
                if(i > m)break;
             }
             k ++;
             if(maxn < aa - 1) maxn = aa - 1;
          }
          
          
          sort(node + 1 ,node + m + 1 ,camp2);
          ans[0] = 0;
          node[1].pm = 1;
          for(i = 1 ;i <= m ;i ++)
          {
             if(node[i].pm != node[i - 1].pm)
             {
                ans[node[i].pm] = node[i].l + ans[node[i].pm -1];
             }
             else
             ans[node[i].pm] += node[i].l;
          }
        
          printf("Case #%d:
    " ,cas ++);
          for(i = 1 ;i <= q ;i ++)
          {
             int a;
             scanf("%d" ,&a);
             if(a > maxn) a = maxn;
             printf("%I64d
    " ,ans[a]);
          }
       }
       return 0;
    }
    

  • 相关阅读:
    Guava入门第四章(Objects)
    Guava入门第三章(Preconditions)
    Guava入门第二章(Splitter)
    Guava入门第一章(Joiner)
    Docker入门第六章
    Docker遇到的问题
    Docker命令图
    2016-08-26-Java比较器的使用
    2017-10-6-MyBatis配置简述
    2017-9-17-Java Exception小结
  • 原文地址:https://www.cnblogs.com/csnd/p/12063244.html
Copyright © 2011-2022 走看看