1. 程式人生 > 其它 >Codeforces Round #737 (Div. 2) 題解

Codeforces Round #737 (Div. 2) 題解

比賽地址:https://codeforces.com/contest/1557。

比賽地址:https://codeforces.com/contest/1557

A

由樣例解釋可知最佳方案是最大的一組,其他的一組。

typedef long long ll;

const int N=1e5;

int n,a[N+10];

void mian(){
	for(int i=1;i<=n;i++)a[i]=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",a+i);
	std::sort(a+1,a+n+1);
	double ans=0.0;
	for(int i=1;i<=n-1;i++)
		ans+=a[i];
	ans/=(n-1);
	ans+=a[n];
	printf("%.9lf\n",ans);
}

B

能分到一段當前僅當排序前和排序後都連續。

於是我們可以求出最少分多少段,然後把它和 \(k\) 比較。

typedef long long ll;

const int N=1e5;

int n,k;
std::pair<int,int> a[N+10];

void mian(){
	for(int i=1;i<=n;i++)a[i].first=a[i].second=0;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i].first),a[i].second=i;
	std::sort(a+1,a+n+1);
	int ans=0;
	for(int i=2;i<=n;i++)
		if(a[i].second!=a[i-1].second+1)ans++;
	if(ans+1<=k)puts("Yes");
	else puts("No");
}