昨晚cf d
  • 板块学术版
  • 楼主for_to
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/9/19 19:36
  • 上次更新2023/11/2 19:05:02
查看原帖
昨晚cf d
557851
for_to楼主2023/9/19 19:36

考虑先取 c 最小且最后的位置 p,再在 [p+1,n] 看有没有能使得总次数不变的,可以就贪心的改掉,为啥 WA 3 了啊。

#include<bits/stdc++.h>
#define int long long
#define N 500005

using namespace std;

const int inf=1e9;

int n,k;
int c[N],tag[N];
int f[N];

void sol(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>c[i],tag[i]=0;
	cin>>k;
	
	int id=0;
	c[0]=inf;
	for(int i=1;i<=n;i++)
		if(c[i]<=c[id]) 
			id=i;
			
	tag[id]+=(k/c[id]);
	k=k-tag[id]*c[id];
	
	for(int i=n;i>id;i--){
		int cst=c[i]-c[id];
		int tim=min(k/cst,tag[id]);
		k=k-(tim*cst);
		tag[id]-=tim;
		tag[i]+=tim;
	}
		
	tag[n+1]=0;
	for(int i=n;i>=1;i--) tag[i]+=tag[i+1],f[i]=tag[i];
	for(int i=1;i<=n;i++) cout<<f[i]<<' ';
	cout<<endl;
}

signed main(){
	cin.tie(0); ios::sync_with_stdio(false);
	
	int T;
	cin>>T;
	while(T--) sol(); 
	
	return 0;
}
2023/9/19 19:36
加载中...