为什么RE?
查看原帖
为什么RE?
550074
cloudemakers楼主2023/3/31 13:51

RE代码

#include<bits/stdc++.h>
#define maxn 50000
#define ll long long
using namespace std;
ll n,m,a[maxn],flag[maxn],b[maxn],c[maxn],tem,ans[maxn];
priority_queue<ll> q;
int main(){
    scanf("%lld%lld",&n,&m);
    if (m==0) return 0;
    for (int i=1;i<=n;i++) scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
    int now=1;
    for (ll j=1;j<=n;j++){
        ll low =(-1)*(b[j]/(2*a[j]));
        if (low<=0) low=1;
        for (ll i=low;i<=low+m;i++){
            if (flag[j]) break;
            ll anss=a[j]*pow(i,2)+b[j]*i+c[j];
            if (!q.empty()&&q.size()==m){
                if (q.top()<anss){
                    flag[j]=1;
                }
                else if (q.top()>=anss){
                    flag[q.top()]=1;
                    q.pop();
                    q.push(anss);
                }
            }
            else q.push(anss);
    }
}
    ll mm=m;
    while(!q.empty()&&mm){
        ans[mm]=q.top();
        q.pop();
        mm--;
    }
    for (ll i=1;i<=m;i++) printf("%lld ",ans[i]);
}

AC代码

#include<bits/stdc++.h>
#define maxn 50000
#define ll long long
using namespace std;
ll n,m,a[maxn],b[maxn],c[maxn],tem,ans[maxn];
priority_queue<ll> q;
int main(){
	scanf("%lld%lld",&n,&m);
	if (m==0) return 0;
	for (int i=1;i<=n;i++) scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
	int now=1;
	for (ll j=1;j<=n;j++){
		ll low =(-1)*(b[j]/(2*a[j]));
		if (low<=0) low=1;
		for (ll i=low;i<=low+m;i++){
			ll anss=a[j]*pow(i,2)+b[j]*i+c[j];
			if (q.empty()||q.size()<m) q.push(anss);
			if (!q.empty()&&q.size()==m){
				if (q.top()>=anss){
					q.pop();
					q.push(anss);
				}
				else break;
			}
	}
}
	ll mm=m;
	while(!q.empty()&&mm){
		ans[mm]=q.top();
		q.pop();
		mm--;
	}
	for (ll i=1;i<=m;i++) printf("%lld ",ans[i]);
}
2023/3/31 13:51
加载中...