zoukankan      html  css  js  c++  java
  • HDU 4020 Ads Proposal(排序,暴力)

    Ads Proposal

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)
    Total Submission(s): 1063    Accepted Submission(s): 410


    Problem Description
    There are N customers set their M different advertisements on Baidu. Each advertisement is owned by single customer. The ads system of Baidu records the number of clicks of each advertisement this year. The proposal system wants to analysis the advertisements about the relativity of the description length and the number of clicks of the advertisements. During the analysis, it is very important to do such a query to ask the total length of the advertisements with top k clicking times for each customer. You may assume the number of clicks of all advertisements are distinct.
    Your task is to help Baidu to design this little toolkit.
     

    Input
    The input consist multiple test cases. The number of test cases is given in the first line of the input.
      For each test case, the first line contains three integers N, M and Q, denoting the number customer, the number of advertisement instances and the number of queries. (N <= 100000, M <= 500000, Q <= 100000)
      Then M lines follow, each line contains three numbers, U, C and L, indicating the owner of this advertisement, the clicks for this advertisement and the length. (1 <= U <= N, 0 <= C, L <= 1000000000)
      Finally Q lines come. Each line contains only one integer k, representing the query for top k clicking advertisements for each customer.
     

    Output
    For each test case, output Q lines, each line contains only one integer, denoting the sum of total length of the top k number of clicks for each customer.
     

    Sample Input
    2 2 4 3 1 12 13 2 23 41 1 21 46 1 22 31 1 2 3 6 15 3 5 2677139 731358928 2 347112028 239095183 6 27407970 85994789 6 767687908 734935764 6 255454855 110193353 3 39860954 813158671 5 617524049 55413590 3 338773814 7907652 6 810348880 736644178 2 777664288 63811422 6 590330120 616490361 5 552407488 136492190 1 416295130 448298060 5 811513162 232437061 4 43273262 874901209 4 9 13
     

    Sample Output
    Case #1: 72 118 131 Case #2: 5801137622 5887132411 5887132411
     

    Source
     

    Recommend
    lcy
     
    思路很好想,但是感觉会超时,优化下就OK了。。。暂时没有想到更好的办法了
    #include<stdio.h>
    #include<algorithm>
    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    using namespace std;
    const int MAXN=100005;
    const int MAXM=500005;
    int U[MAXM],C[MAXM],L[MAXM];
    int rank[MAXM];
    int hash[MAXN];
    long long res[MAXM];
    int cmp(const void *a,const void *b)
    {
    return C[*(int *)b]-C[*(int *)a];
    }
    int main()
    {
    //freopen("test.in","r",stdin);
    //freopen("test.out","w",stdout);
    int T;
    int iCase;
    int i;
    iCase=0;
    scanf("%d",&T);
    int N,M,Q;
    int k;
    while(T--)
    {
    iCase++;
    scanf("%d%d%d",&N,&M,&Q);
    for(i=0;i<M;i++)
    {
    scanf("%d%d%d",&U[i],&C[i],&L[i]);
    rank[i]=i;
    }
    memset(hash,0,sizeof(hash));
    memset(res,0,sizeof(res));
    qsort(rank,M,sizeof(rank[0]),cmp);
    for(i=0;i<M;i++)
    {
    res[++hash[U[rank[i]]]]+=L[rank[i]];
    }
    for(i=1;i<=M;i++)
    res[i]+=res[i-1];
    printf("Case #%d:\n",iCase);
    while(Q--)
    {
    scanf("%d",&k);
    if(k>=M) printf("%I64d\n",res[M]);
    else printf("%I64d\n",res[k]);
    }
    }
    return 0;
    }
  • 相关阅读:
    GetTickCount 和getTickCount
    载入其他同名源文件导致vs编译错误
    opencv的配置
    VS05错误:部署WEB文件失败
    c++移动文件夹
    opencv2.4.0版本不支持Mat的大小自动调整?
    关于c++中public & private方法调用问题
    c++读取文件夹及子文件夹数据
    深入理解java虚拟机-第四章
    深入理解java虚拟机-第三章
  • 原文地址:https://www.cnblogs.com/kuangbin/p/2198898.html
Copyright © 2011-2022 走看看