2015 多校联赛 ——HDU5360(贪心+优先队列)
8
4 1 3 2 2 1 0 3
5 3 6 4 2 1 7 6
8
3 3 2 0 5 0 3 6
4 5 2 7 7 6 7 6
8
2 2 3 3 3 0 0 2
7 4 3 6 3 2 2 5
8
5 6 5 3 3 1 2 4
6 7 7 6 5 4 3 5
1 7 6 5 2 4 3 8
8
4 6 3 1 2 5 8 7
7
3 6 7 1 5 2 8 4
0
1 2 3 4 5 6 7 8
找出能约出最多人的顺序。 假设前面已经有x人同意了,对于第i个人而言, l[i] <= x <= r[i] ,则第i个人同意。求以怎样的顺序去找人最合适。
感觉思路大致方向是对的,只是方法上有些问题,不够简便(- -)
在同l都满足的情况下,选择的r要尽可能的小,才能保证后面选的更多
scanf("%d",&tmp);
q[p[i]].push_back(node(tmp,i));
p[i]是它的左边,tmp是右边,用这样保存的话在查找的时候便不用查找全部。(详细看代码)
每次查找后都保证了(l[i] <= i 的全部被包括了,感觉别人好机智 。。)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std; struct node
{
int b, num;
node() {}
node( int _b, int _num )
{
b = _b, num = _num;
}
bool operator < ( const node & l ) const
{
return b > l.b;
}
};
int p[100010];
int n;
int rec[100010];
int vis[100010];
int aim;
vector<node>q[100010];
priority_queue<node>que; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
aim=0;
memset(vis,0,sizeof(vis));
scanf("%d",&n);
for(int i = 0;i <= n;i++)
q[i].clear(); for(int i=1; i<=n; i++)
{
scanf("%d",&p[i]);
} for(int i=1; i<=n; i++)
{
int tmp;
scanf("%d",&tmp);
q[p[i]].push_back(node(tmp,i)); //用左边界来记录
} while(1)
{
int flag = 0;
for(int i=0; i < q[aim].size(); i++) //这里就不需要全部找一遍
{
que.push(q[aim][i]);
}
while(!que.empty())
{
if(que.top().b>= aim && vis[que.top().num]!=1)
{
vis[que.top().num]=1;
rec[aim] = que.top().num;
aim++;
que.pop();
flag = 1;
break;
}
que.pop();
}
if(!flag)
break;
} printf("%d\n",aim);
if(aim)
{
printf("%d",rec[0]);
for(int i=1; i<aim; i++)
printf(" %d",rec[i]); for(int i=1; i<=n; i++)
{
if(vis[i]==0)
printf(" %d",i);
}
}
else
{
printf("1");
for(int i = 2; i <= n; i++)
printf(" %d",i);
}
printf("\n");
}
return 0;
}
2015 多校联赛 ——HDU5360(贪心+优先队列)的更多相关文章
- 2015 多校联赛 ——HDU5303(贪心)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- 2015 多校联赛 ——HDU5334(构造)
Virtual Participation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- 2015 多校联赛 ——HDU5302(构造)
Connect the Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 2015 多校联赛 ——HDU5294(最短路,最小切割)
Tricks Device Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- 2015 多校联赛 ——HDU5325(DFS)
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Tota ...
- 2015 多校联赛 ——HDU5316(线段树)
Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an ...
- 2015 多校联赛 ——HDU5323(搜索)
Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 2015 多校联赛 ——HDU5319(模拟)
Painter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- 2015 多校联赛 ——HDU5301(技巧)
Your current task is to make a ground plan for a residential building located in HZXJHS. So you must ...
随机推荐
- c++第0次作业
1.你认为大学的学习生活.同学关系.师生应该是怎样? 随着大学生活的慢慢到来,我开始领悟到大学并不是自由的天堂,相反,我们更加的走进社会这个牢笼.在这个牢笼中有着从前的我们并不需要在意和考虑的规则与问 ...
- 学号:201621123032 《Java程序设计》第5周学习总结
1:本周学习总结 1.1: 写出你认为本周学习中比较重要的知识点关键词 接口interface,comparator接口和comparable接口. 1.2:尝试使用思维导图将这些关键词组织起来. 2 ...
- 下载文件downloadFile
public static void downLoadFile(InputStream inStream, String fileName) { if (StringUtils.isBlank(fil ...
- c/cpp语言链表连接部分详解
核心代码: ①pTail->next = pNew; ②pNew->next = NULL; ③pTail = pNew; 设结构体名称为 struct ST: 注:方框代表分配的内存空间 ...
- Python入门代码练习
一.循环猜年龄程序,猜错三次则打印提示信息并退出循环,猜对也打印提示信息并退出循环 count=0while count < 3: num = input("猜年龄游戏:") ...
- javascript 腾讯ABS云平台面试题及面试经历
既然说到面试前端肯定是Javascript各种问,只好各种答. 面试题肯定离不了,最近热门的Vue.js,React.js,Angular.js,Gulp,Webpack还有各种Js问题,还有令人头痛 ...
- css3动画transition详解2
transition主要包含四个属性值:执行变换的属性:transition-property,变换延续的时间:transition-duration,在延续时间段,变换的速率变化transition ...
- .Net Core MongoDB 简单操作。
一:MongoDB 简单操作类.这里引用了MongoDB.Driver. using MongoDB.Bson; using MongoDB.Driver; using System; using S ...
- java图片处理开源框架
java图片处理开源框架 以前一直不明白,java开源框架什么意思,搜集资料得出以下结论 其实java框架可以理解为一个工具或者一个插件,将一个公用的.常用的技术封装起来,处理一些基础的.繁琐的问题. ...
- 用‘+=’拼接字符串,打印时总会出现一个undefined
var str; for(var i = 0; i < 5; i++){ str += String(i); } console.log(str); 他喵的,打印的结果竟然是"unde ...