看完第一篇题解思路打了一遍,但是WA。和题解对拍也没问题
#include<bits/stdc++.h>
using namespace std;
struct ta
{
long long id,s,ti,pr;
bool operator <(const ta &a)const
{
if(pr==a.pr)return s>a.s;
else return pr<a.pr;
}
};
priority_queue<ta> pq;
int main()
{
freopen("P2278.out","w",stdout);
long long t;
ta fc;
while(scanf("%d%d%d%d",&fc.id,&fc.s,&fc.ti,&fc.pr)!=EOF)
{
while(!pq.empty()&&t+pq.top().ti<=fc.s)
{
ta Top=pq.top();
pq.pop();
cout<<Top.id<<' '<<t+Top.ti<<'\n';
t+=Top.ti;
}
if(!pq.empty())
{
ta Top=pq.top();
pq.pop();
Top.ti=Top.ti-fc.s+t;
pq.push(Top);
}
pq.push(fc);
t=fc.s;
}
while(!pq.empty())
{
ta Top=pq.top();
pq.pop();
t+=Top.ti;
cout<<Top.id<<' '<<t<<'\n';
}
return 0;
}
当然也有可能是我对拍写错了 对拍代码(bat)
@echo off
:loop
P2278rand.exe
P2278.exe
right_P2278.exe
fc P2278.out right_P2278.out
if not errorlevel 1 goto loop
pause