P8162求hack思路
  • 板块灌水区
  • 楼主Guoguo2013
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/19 22:54
  • 上次更新2024/12/20 17:10:15
查看原帖
P8162求hack思路
1070982
Guoguo2013楼主2024/12/19 22:54

https://www.luogu.com.cn/problem/P8162

#include<bits/stdc++.h>
#define int long long
#define PII pair< int, int >

using namespace std;

const int N = 5e2 + 5, mod = 998244353;
int n, k; 
PII a[N];
double q[N];
double daan = 0x3f3f3f3f, dan, bl;

template< typename T >inline void read(T &x){bool f=1;x=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=!f;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}x=(f?x:-x);return;}
template< typename T, typename ... L > void read(T &a , L && ... b) { read(a); read(b ...); }
int ksm(int a, int b, int p){int ans = 1;while(b){if(b & 1)ans =(ans*a)%p;b >>= 1;a = (a*a) % p;}return ans;}
signed main(){
//	freopen("a.in", "r", stdin);
//	freopen("a.out","w",stdout);
	read(n, k);
	for (int i = 1; i <= n; i++){
		read(a[i].second, a[i].first);
		if (a[i].first == -1) a[i].first = 0x3f3f3f3f; 
	}
	sort(a + 1, a + n + 1);
	for (int i = 1; i <= n; i++) swap(a[i].first, a[i].second);
	for (int i = 0; i < k; i++){
		for (int j = i + 1; j <= n; j++) q[j] = (double)a[j].first;
		sort(q + i + 1, q + n + 1);
		dan = 0;
		bl = 1;
		for (int j = 1; j <= i; j++){
			dan += (double)a[j].second / bl;
			bl += 1;
		}
		for (int j = i + 1; j <= k; j++) dan += (double)q[j] / bl;
		daan = min(daan, dan);
	}
	printf("%.20lf", daan);
	return 0;
}

感觉直接贪心也是对的。

2024/12/19 22:54
加载中...