为何RE?
查看原帖
为何RE?
243484
zhangqin123楼主2021/8/16 21:57

求差错 不知为何RE和WA 感谢!

提交记录

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
struct node{
	long long int a,b,c,d;
}tree[1000001];
long long now,now2,ans1,ans2;
long long int T,n,len; // 手打堆 小根堆 
void puts(long long int a,long long int b,long long int c,long long int d)
{
	len++;
	tree[len].a=a;
	tree[len].b=b;
	tree[len].c=c;
	tree[len].d=d;
	long long int son=len;
	while(son>1)
	{
		long long int fa=son/2;
		if(tree[fa].a>tree[son].a) swap(tree[fa],tree[son]);
		else if(tree[fa].a==tree[son].a && tree[fa].b>tree[son].b) swap(tree[son],tree[fa]);
		else break;
		son=fa;
	}
	return ;
}
void get()
{
	long long int a=tree[1].a;
	long long int b=tree[1].b;
	long long int c=tree[1].c;
	long long int d=tree[1].d;
	tree[1]=tree[len];
	len--;
	long long int fa=1;
	while(fa*2<=len)
	{
		long long int son=fa*2;
		if(tree[son].a>tree[son+1].a && son+1<=len) son++;
		else if(tree[son].a==tree[son+1].a && tree[son].b>tree[son+1].b && son+1<=len) son++;
		if(tree[fa].a>tree[son].a) swap(tree[fa],tree[son]);
		else if(tree[fa].a==tree[a].a && tree[fa].b>tree[son].b) swap(tree[fa],tree[son]);
		else break;
		fa=son;
	}
	if(now>=a) 	now+=c; //如果能穿上 
	else ans1+=(a-now),now=(a+c); // 不能穿上 
	if(now2>=b) now2+=d; // 同理 
	else ans2+=(b-now2),now2=(b+d);
}
int main()
{
	scanf("%lld",&T);
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)
	{
		long long int a,b,c,d;
		scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
		puts(a,b,c,d); 
	}
	for(int i=1;i<=n;i++)
		get();
	printf("%lld %lld",ans1,ans2);
}
2021/8/16 21:57
加载中...