hdu5437(2015 장춘 인터넷 경기 A 문제)
한 파티가 있는데 n명이 온다. 모든 사람이 선물을 가지고 온다. 선물은 가치가 있다. 방의 크기가 제한되어 있기 때문에 그는 k시간을 선택해서 문을 열고 t시간에 p사람을 들어오게 한다. 다음에 q팀에서 묻는다. 각 팀에서 숫자ni가 있는데 너로 하여금 첫 번째로 들어온 사람이 누구인지 출력하게 한다.
아이디어:
우선 순위 대기열을 사용하고 우선 순위를 스스로 정의하면 됩니다. 왜냐하면 cin과scanf가 우리 TLE를 한 번 혼용하는 것이 교훈이기 때문입니다.
코드:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 150005;
struct PER
{
string name;
int pos;
int x;
bool operator < (const PER& rhs) const {
if (rhs.x != x) {
return rhs.x > x;
}
return rhs.pos < pos;
}
}node[maxn];
struct E {
int x, y;
}e[maxn];
bool cmp(E a, E b) {
if(a.x != b.x) {
return a.x < b.x;
}
return a.y < b.y;
}
priority_queue q;
string ans1[maxn];
char str[1000];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m,kk;
scanf("%d%d%d",&n,&m,&kk);
for(int i = 1; i <= n; i++) {
scanf("%s%d",str,&node[i].x);
node[i].name = str;
node[i].pos = i;
}
for(int i = 1; i <= m; i++) {
scanf("%d %d",&e[i].x, &e[i].y);
}
sort(e + 1, e + m + 1,cmp);
while(!q.empty()) q.pop();
int j = 1;
int l = 1;
for(int i = 1; i <= m; i++) {
while(j <= e[i].x) {
q.push(node[j]);
j++;
}
//printf("%d %d
", e[i].x, e[i].y);
for(int k = 1; k <= e[i].y;k++) {
if(q.empty()) break;
PER p1 = q.top(); q.pop();
ans1[l++] = p1.name;
// cout << p1.name << " " << p1.x << endl;
}
}
while(j <= n) {
q.push(node[j]);
j++;
}
while(!q.empty()) {
PER p1 = q.top(); q.pop();
ans1[l++] = p1.name;
}
for(int i = 1; i <= kk; i++) {
int xx;
scanf("%d",&xx);
if(i == 1) printf("%s", ans1[xx].c_str());
else printf(" %s", ans1[xx].c_str());
}puts("");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.