hdu4020简单想法题
来源:互联网 发布:魔兽世界数据库安卓版 编辑:程序博客网 时间:2024/05/24 05:22
题意:
给你一些人,这些人有很多广告,每个广告有自己的点击率和长度,每次有m组询问,问每个人点击率前K名的广告的总长度是多少.
思路:
给你一些人,这些人有很多广告,每个广告有自己的点击率和长度,每次有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:\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;}
0 0
- hdu4020简单想法题
- hdu4020
- hdu4020
- HDU4020--Ads Proposal
- 简单爱国想法
- 一点简单的想法
- hdu_4342 History repeat itself (简单想法题)
- 程序异步的简单想法?
- POJ 2479的简单想法
- android 开发安全简单想法
- 处理数据平滑的简单想法
- 实验室管理的一些简单想法
- 一种生成排列的简单想法
- 一个简单单片机项目的一些想法
- 关于递归的一些简单想法
- 前端优化简单的优化想法
- 关于三种简单排序的想法
- POJ-2182 Lost Cows 简单的想法
- HDU 1.3.4悼念512汶川大地震遇难同胞——老人是真饿了
- 92. 统计节点个数
- uva 568 just the facts
- linux下db2和cognos需配置的文件有哪些
- LeetCode Binary Tree Level Order Traversal II
- hdu4020简单想法题
- 双屏笔记
- 2.3:随机生成一个n bit位的长质数。
- (二)国际化—本地化字符串
- SQLSERVER问题
- 图像处理中的傅立叶变换(闲扯版)
- mosquitto源码分析(四)
- 人生有无数的遗憾,无数的泪水,无数的相遇与错过的故事
- 一次goldengate故障引发的操作系统hang起,HA自动切换