QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#562086#7744. ElevatorReanap#TL 1ms7808kbC++141.5kb2024-09-13 14:54:582024-09-13 14:54:59

Judging History

你现在查看的是最新测评结果

  • [2024-09-13 14:54:59]
  • 评测
  • 测评结果:TL
  • 用时:1ms
  • 内存:7808kb
  • [2024-09-13 14:54:58]
  • 提交

answer

/*
¤ï¤ó¤ï¤ó¡­¡­¤ï¤ó¤À¤Û©`¤¤¤Ã¡î
Wonderhoy!
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef double DB;
char buf[1<<21],*p1=buf,*p2=buf;
#define getchar() (p1==p2 && (p2=(p1=buf)+fread(buf,1,1<<18,stdin),p1==p2)?EOF:*p1++)
LL read()
{
	LL x=0;
	char c=getchar();
	while(c<'0' || c>'9')	c=getchar();
	while(c>='0' && c<='9')	x=(x<<1)+(x<<3)+(c^'0'),c=getchar();
	return x;
}
void write(LL x)
{
	if(x>9)	write(x/10);
	putchar(x%10+'0');
}
typedef pair<LL,LL> P;
typedef vector<LL> Poly;
typedef vector<P> PolyP;
#define mp make_pair
#define spc putchar(' ')
#define etr putchar('\n')
#define inlp(x,y) putchar(x==y?'\n':' ')
struct node{
	LL c,w,h;
	node(LL C=0,LL W=0,LL H=0){c=C,w=W,h=H;}
	inline bool operator < (node f) const {return h<f.h || (h==f.h && w<f.w);}
}a[100005];
LL n,k;
LL cnt,id[100005];
void Solve()
{
	n=read(),k=read();
	for(LL i=1;i<=n;++i)
	{
		LL c=read(),w=read(),h=read();
		a[i]=node(c,w,h);
	}
	sort(a+1,a+1+n);
	cnt=0;
	for(LL i=1;i<=n;++i)	if(a[i].w==1)	id[++cnt]=i;
	LL p=n,ans=0;
	while(p>=1)
	{
		if(a[p].c==0)
		{
			--p;
			continue;
		}
		LL r=k;
		ans+=a[p].h;
		while(1)
		{
			LL c=a[p].c,w=a[p].w;
			if(c*w>r)
			{
				a[p].c-=r/w;
				r-=r/w*w;
				if(r)
				{
					while((id[cnt]>=p || a[id[cnt]].c==0) && cnt>=1)	--cnt;
					if(cnt>=1)	--a[id[cnt]].c;
				}
				break;
			}
			r-=c*w;
			--p;
			if(p==0)	break;
		}
	}
	write(ans),etr;
}
int main(){
	LL T=read();
	while(T-->0)	Solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 7808kb

input:

2
4 6
1 1 8
7 2 5
1 1 7
3 2 6
8 1200000
100000 1 100000
100000 1 12345
100000 2 100000
100000 2 12345
100000 1 100000
100000 1 12345
100000 2 100000
100000 2 12345

output:

24
100000

result:

ok 2 lines

Test #2:

score: -100
Time Limit Exceeded

input:

5501
8 104
5 2 3
6 2 4
5 2 3
6 2 9
8 2 4
2 1 3
7 2 4
8 2 8
1 290
3 1 1
12 12
6 1 2
1 2 2
1 1 2
1 2 4
6 1 1
1 2 5
6 1 4
4 1 4
6 2 4
6 2 5
4 2 5
4 1 4
5 334
1 1 4
1 2 3
4 2 1
5 1 1
2 1 2
13 218
5 2 3
5 1 4
1 2 1
1 2 5
3 2 2
1 1 3
4 2 2
1 2 5
2 2 1
2 1 5
3 2 1
5 2 1
1 1 4
10 260
7 2 1
5 1 1
5 2 4
6 1 6...

output:

9
1
23
4
5
7
1
3
9
6
1
10
4
9
17
6
4
1
8
5
5
7
1
3
23
6
3
3
2
2
2
3
8
1
5
6
9
11
147
7
10
2
7
7
8
6
5
5
1
7
3
5
10
7
7
10
8
1
4
2
3
9
1
5
2
9
1
6
7
7
6
10
18
8
10
4
10
9
2
8
3
5
9
3
6
5
3
2
6
1
3
2
2
1
6
9
6
3
4
8
9
9
2
6
1
2
6
7
5
2
5
21
8
1
2
3
4
9
3
4
6
5
9
6
1
7
3
7
3
2
2
8
7
3
5
9
7
10
7
3
2
4
...

result: