日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu4020简单想法题

發布時間:2025/6/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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];}elseans[node[i].pm] += node[i].l;}printf("Case #%d:\n" ,cas ++);for(i = 1 ;i <= q ;i ++){int a;scanf("%d" ,&a);if(a > maxn) a = maxn;printf("%I64d\n" ,ans[a]);}}return 0; }

總結

以上是生活随笔為你收集整理的hdu4020简单想法题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。