求助诡异错误
查看原帖
求助诡异错误
760998
rhn7楼主2023/10/8 17:52
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=250000;
ll n,a[N],b[N],vis[N];
struct cmp{
	bool operator()(ll x,ll y){
		return b[x]<b[y];
	}
};
priority_queue<ll,vector<ll>,cmp> pq;
int main(){
	scanf("%lld",&n);
	for(ll i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	for(ll i=1;i<=n;i++){
		scanf("%lld",&b[i]);
	}
	ll sum=0,cnt=0;
	for(ll i=1;i<=n;i++){
		sum+=a[i];
		if(sum>=b[i]){
			vis[i]=1;
			cnt++;
			sum-=b[i];
			pq.push(i);
		}else if(!pq.empty()&&b[pq.top()]>=b[i]&&sum+b[pq.top()]>=b[i]){
			vis[pq.top()]=0;
			vis[i]=1;
			sum+=b[pq.top()];
			sum-=b[i];
			pq.pop();
			pq.push(i);
		}
	}
	printf("%lld\n",cnt);
	for(ll i=1;i<=n;i++){
		if(vis[i]) printf("%lld ",i);
	}
    return 0;
}

这样写会2RE+1WA

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2500000;
ll n,a[N],b[N],vis[N];
struct cmp{
	bool operator()(ll x,ll y){
		return b[x]<b[y];
	}
};
priority_queue<ll,vector<ll>,cmp> pq;
int main(){
	scanf("%lld",&n);
	for(ll i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	for(ll i=1;i<=n;i++){
		scanf("%lld",&b[i]);
	}
	ll sum=0,cnt=0;
	for(ll i=1;i<=n;i++){
		sum+=a[i];
		if(sum>=b[i]){
			vis[i]=1;
			cnt++;
			sum-=b[i];
			pq.push(i);
		}else if(!pq.empty()&&b[pq.top()]>=b[i]&&sum+b[pq.top()]>=b[i]){
			vis[pq.top()]=0;
			vis[i]=1;
			sum+=b[pq.top()];
			sum-=b[i];
			pq.pop();
			pq.push(i);
		}
	}
	printf("%lld\n",cnt);
	for(ll i=1;i<=n;i++){
		if(vis[i]) printf("%lld ",i);
	}
    return 0;
}

数组开大十倍就AC

2023/10/8 17:52
加载中...