社区讨论

求本题贪心做法 hack

AT_abc327_e[ABC327E] Maximize Rating参与者 3已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@mdmhcwhn
此快照首次捕获于
2025/07/28 10:19
7 个月前
此快照最后确认于
2025/11/04 06:29
4 个月前
查看原帖
rt
枚举参加的比赛场次数,每次从剩余的 perf 中选取最靠前的最大值,并选择,并计算对应 rating。
感觉在 1200k-\frac{1200}{\sqrt{k}} 确定时,只需要最大化前面的式子即可。但为什么 WA 呢?
或者给出反例也可。
代码:
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long double var;

int n;
int s[5005];

var perf[5005];

var k;
var sumk;

var rating;

var marating=-114514;

int main(){
	ios::sync_with_stdio(0);
	
	cin>>n;
	for(int i=1;i<=n;++i) cin>>s[i];
	
	for(int i=1;i<=n;++i){
		int maxp=0,maxj;
		for(int j=1;j<=n;++j){
			if(s[j]>maxp) maxp=s[j],maxj=j;
		}
		perf[maxj]=s[maxj],s[maxj]=0;
		
		k=1,rating=0,sumk=0;
		
		for(int j=n;j>=1;--j){
			if(perf[j]){
				rating+=perf[j]*k,sumk+=k;
				k*=0.9;
			}
		}
		
		rating=rating/sumk-1200./sqrtl(i);
		
		marating=max(rating,marating);
	}
	
	cout<<fixed<<setprecision(16)<<marating<<endl;
	
	return 0;
}

回复

11 条回复,欢迎继续交流。

正在加载回复...