hdu4020简单想法题
2024-10-19 08:24:38
题意:
给你一些人,这些人有很多广告,每个广告有自己的点击率和长度,每次有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;
}
最新文章
- HTTP请求 GET与POST是怎么实现?
- React 学习资源汇总(最全的 React 学习资料)
- web前端工程师在移动互联网时代里的地位问题
- css知多少(9)——float下篇
- 解决阿里云数据库RDS报错The table &#39;/home/mysql/data3015/tmp/#sql_13975_23&#39; is full
- XMLHttpRequest基础知识
- Struts学习之模型驱动
- jquery中怎么删除<;ul>;中的整个<;li>;包括节点
- echarts 系列一
- Bug 笔记
- hive 创建表和导入数据实例
- VS2015 将*.xaml.cs文件包裹在*.xaml文件下
- python私有属性和私有方法
- ChinaCock界面控件介绍-TCCBarcodeCreator
- 表单元素的required,autocomplete,list用法
- C# 关键字const与readonly的区别
- __NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0xb000000000000003
- ubantu 上hadoop 搭建
- 04_web基础(七)之jsp
- Java内存管理(一):深入Java内存区域