Regional Changchun Online--Alisha’s Party
Alisha’s Party
Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1079 Accepted Submission(s): 297
v,
and all of them will come at a different time. Because the lobby is not large enough, Alisha can only let a few people in at a time. She decides to let the person whose gift has the highest value enter first.
Each time when Alisha opens the door, she can decide to let
p
people enter her castle. If there are less than p
people in the lobby, then all of them would enter. And after all of her friends has arrived, Alisha will open the door again and this time every friend who has not entered yet would enter.
If there are two friends who bring gifts of the same value, then the one who comes first should enter first. Given a query
n
Please tell Alisha who the n−th
person to enter her castle is.
T
, where 1≤T≤15.
In each test case, the first line contains three numbers
k,m
and q
separated by blanks. k
is the number of her friends invited where 1≤k≤150,000.
The door would open m times before all Alisha’s friends arrive where
0≤m≤k.
Alisha will have q
queries where 1≤q≤100.
The i−th
of the following k
lines gives a string Bi,
which consists of no more than 200
English characters, and an integer vi,
1≤vi≤108,
separated by a blank. Bi
is the name of the i−th
person coming to Alisha’s party and Bi brings a gift of value
vi.
Each of the following m
lines contains two integers t(1≤t≤k)
and p(0≤p≤k)
separated by a blank. The door will open right after the
t−th
person arrives, and Alisha will let p
friends enter her castle.
The last line of each test case will contain q
numbers n1,...,nq
separated by a space, which means Alisha wants to know who are the
n1−th,...,nq−th
friends to enter her castle.
Note: there will be at most two test cases containing
n>10000.
1
5 2 3
Sorey 3
Rose 3
Maltran 3
Lailah 5
Mikleo 6
1 1
4 2http://write.blog.csdn.net/postedit
1 2 3
Sorey Lailah Rose
优先队列+模拟,en,应该还行,时间上应该不会超时了,但是下面问题来了。。。
真的是无力吐槽了,感觉。。。
因为排序的问题,一直错,一直错,一直错,结果拖累的小组最后这个题都没A掉。。。
#include<iostream>
#include<stdio.h>
#include<math.h>
#include <string>
#include<string.h>
#include<map>
#include<queue>
#include<set>
#include<utility>
#include<vector>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define eps 1e-8
#define pii pair<int,int>
#define INF 0x3f3f3f3f
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define ll long long int
char outname[150005][205];
int coun=0; struct People
{
char name[205];
int value;
int pre;
friend bool operator < (People n1, People n2)
{
if(n1.value != n2.value) return n1.value < n2.value;
return n1.pre > n2.pre;
}
} people[150005]; int main ()
{
//cout<<"&&&"<<endl;
int Case;
rd(Case);
while(Case--)
{
int now=0;
coun=0;
int n,innum,quenum;
rd(n);
rd2(innum,quenum);
for(int i=0; i<n; i++)
{
scanf("%s",&people[i].name);
rd(people[i].value);
people[i].pre = i;
} priority_queue <People> que;
int temp1,temp2;
<span style="background-color: rgb(153, 255, 153);"> for(int i=0; i<innum; i++)
{
rd2(temp1,temp2);
for(int i=now; i<temp1; i++)
que.push(people[i]);//查push和push_back区别 now=temp1;
temp2 = (temp2>que.size() ? que.size() : temp2);
for(int i=0; i<temp2 ; i++)
{
strcpy(outname[coun++],que.top().name);
que.pop();
}
}</span>
int quearr[150005],tempmax=-1;
for(int i=0; i<quenum; i++)
{
rd(quearr[i]);
if(tempmax<quearr[i]) tempmax=quearr[i];
} if( tempmax > coun+1 )
{
for(int i=now; i<n ; i++)
que.push(people[i]);
}
while(!que.empty())
{
strcpy(outname[coun++],que.top().name);
que.pop();
}
for(int i=0; i<quenum; i++)
{
printf("%s",outname[ quearr[i]-1 ]);
if(i<quenum-1) printf(" ");
}
printf("\n");
}
return 0 ;
}
增加一个排序就好了,但是好像还是模拟的有点问题,因为还有一个排序啊,这样就很慢了,所以应该用数组记录下来,遍历模拟。。。
#include<iostream>
#include<stdio.h>
#include<math.h>
#include <string>
#include<string.h>
#include<map>
#include<queue>
#include<set>
#include<utility>
#include<vector>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define eps 1e-8
#define pii pair<int,int>
#define INF 0x3f3f3f3f
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define ll long long int
char outname[150005][205];
int coun=0;
struct T{
int a,b;
}a[150005];
bool cmp(T x,T y){
return x.a<y.a;
}
struct People
{
char name[205];
int value;
int pre;
friend bool operator < (People n1, People n2)
{
if(n1.value != n2.value) return n1.value < n2.value;
return n1.pre > n2.pre;
}
} people[150005]; int main ()
{
//cout<<"&&&"<<endl;
int Case;
rd(Case);
while(Case--)
{
int now=0;
coun=0;
int n,innum,quenum;
rd(n);
rd2(innum,quenum);
for(int i=0; i<n; i++)
{
scanf("%s",&people[i].name);
rd(people[i].value);
people[i].pre = i;
} priority_queue <People> que;
int temp1,temp2;
for(int i=0; i<innum ;i++) rd2(a[i].a,a[i].b);
sort(a,a+innum,cmp); for(int i=0; i<innum; i++)
{
temp1=a[i].a,temp2=a[i].b;
for(int i=now; i<temp1; i++)
que.push(people[i]);//查push和push_back区别 now=temp1;
//temp2 = (temp2>que.size() ? que.size() : temp2);
for(int i=0; i<temp2 ; i++)
{
if(que.empty()) break;
strcpy(outname[coun++],que.top().name);
que.pop();
}
}
int quearr[150005],tempmax=-1;
for(int i=0; i<quenum; i++)
{
rd(quearr[i]);
// if(tempmax<quearr[i]) tempmax=quearr[i];
} //if( tempmax > coun+1 )
// {
for(int i=now; i<n ; i++)
que.push(people[i]);
// }
while(!que.empty())
{
strcpy(outname[coun++],que.top().name);
que.pop();
}
for(int i=0; i<quenum; i++)
{
printf("%s",outname[ quearr[i]-1 ]);
if(i<quenum-1) printf(" ");
}
printf("\n");
}
return 0 ;
}
。。。good code。。。
#pragma comment(linker, "/STACK:102400000,102400000")
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <queue>
#include <map>
#include <vector>
#include <algorithm>
#include <conio.h>
#include <iostream>
using namespace std;
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define ll long long int
#define maxn 100005
#define mod 1000000007
#define pii pair<int,int>
#define maxn 150005
int n,m,t,q,x,y;
struct node
{
int k,v;
friend bool operator <(node a,node b)
{
if(a.v==b.v) return a.k>b.k;
return a.v<b.v;
}
};
char s[maxn][205];
int v[maxn];
int ans[maxn];
int ti[maxn],tot,qq[200];
int main()
{
rd(t);
getchar();
while(t--)
{
rd2(n,m);
getchar();
rd(q);
getchar();
for(int i=1; i<=n; i++)
{
scanf("%s%d",s[i],&v[i]);
}
memset(ti,0,sizeof(ti));
for(int i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
ti[x]=y;
}
tot=0;
int mt=0;
for(int i=1; i<=q; i++)
{
rd(qq[i]);
mt=mt>qq[i]?mt:qq[i];
}
priority_queue<node> que;
node nn;
int k;
for(int i=1; i<=n; i++)
{
nn.k=i;
nn.v=v[i];
que.push(nn);
if(i==n)
{
while(!que.empty())
{
nn=que.top();
que.pop();
ans[++tot]=nn.k;
if(tot>=mt) break;
}
break;
}
for(int j=1; j<=ti[i]; j++)
{
if(que.empty()) break;
nn=que.top();
que.pop();
ans[++tot]=nn.k;
}
if(tot>=mt) break;
}
for(int i=1; i<=q; i++)
{
printf("%s",s[ans[qq[i]]]);
if(i==q) printf("\n");
else printf(" ");
}
}
return 0;
}
Regional Changchun Online--Alisha’s Party的更多相关文章
- 2013 Asia Regional Changchun C
Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K ( ...
- Regional Changchun Online--Elven Postman(裸排序二叉树)
Elven Postman Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...
- Regional Changchun Online--Travel(最小生成树&& 并查集)
Travel Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total S ...
- Regional Changchun Online--Ponds
网址:http://acm.hdu.edu.cn/showproblem.php?pid=5438 Ponds Time Limit: 1500/1000 MS (Java/Others) Me ...
- hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online
Problem Description Elves are very peculiar creatures. As we all know, they can live for a very long ...
- (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )
http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others) Memo ...
- (二叉树)Elven Postman -- HDU -- 54444(2015 ACM/ICPC Asia Regional Changchun Online)
http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others) ...
- 2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】
Elven Postman Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 2015ACM/ICPC Asia Regional Changchun Online /HDU 5438 图
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 1310 ...
随机推荐
- jquery事件切换hover/toggle
1.hover([over,]out) 一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法.这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态. 当鼠标移动到一个匹配的 ...
- IIS不定期Crash和Oracle“未处理的内部错误(-2)”的问题分析
问题描述:系统不定期报出Oracle“未处理的内部错误(-2)”,严重时IIS会Crash 典型异常日志如下: Exception type: System.AccessViolationExce ...
- Android Studio如何添加override
而Android Studio如何添加呢?方法如下: 右键(或者Alt + Insert) --- Generate... ---- Override Method... 或者 Implement ...
- 删除文件夹工具类 DeleteFolder.java
package com.util; import java.io.File; /** * 删除文件夹 * @createTime DSC 20, 2010 15:38 * @version 2.0 * ...
- Shell学习:sed命令
http://blog.sina.com.cn/s/blog_a56ef5490101cn58.html sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行 ...
- 【linux】bash常用快捷键
Ctrl + r:逆向搜索命令历史 Ctrl + l:清屏 Ctrl + c:终止命令 Ctrl + u:删除光标前的指令 Ctrl + k:删除光标后的指令 Ctrl + d:退出登陆
- android学习笔记35——AnimationDrawable资源
AnimationDrawable资源 AnimationDrawable,代表一个动画. android既支持传统的逐帧动画(类似于电影方式,一张图片一张图片的切换),也支持通过平移.变换计算出来的 ...
- HTML网页调用本地QQ
打开聊天窗口代码: tencent://message/?uin=QQ号码&Site=有事Q我&Menu=yes 使用方法: <a href="tencent://me ...
- CentOS7安装Oracle 11g R2 详细过程——零基础
本人linux小白,因项目原因必须要在linux下使用oracle便开始了探索.安装过程中遇到了种种问题与原因,今天整理一下方便后面的可以少走弯路. *注明: 安装过程注意当前错作的用户,执行./ru ...
- 通过xib创建View
1 创建一个xib并使之与一个自定义的View相关联 2 在自定义的View中参考如下代码: - (id)initWithFrame:(CGRect)frame { self = [super ini ...