CF840A Leha and Function

尝试暴力展开。

\[\begin{aligned} F(n,k)&=\dfrac{\sum_{i=1}^{n-k+1}i\times\dbinom{n-i}{k-1}}{\dbinom{n}{k}}\\ &=\dfrac{n+1}{k+1} \end{aligned}\]

数学推导先鸽着因为太难了。

完了,组合意义也看不出来了。

显然越大的 \(n\) 和越小的 \(k\) 配,不能理解就考虑通分后的式子,分子中越大的 \(n\) 乘的数要越大,可以用调整法证明。

时间复杂度 \(O\left(n\log n\right)\)。

code:

#include<bits/stdc++.h>
using namespace std;
#define N 200005
#define For(i,x,y)for(i=x;i<=(y);i++)
struct number
{
	int val,id;
}b[N];
int a[N],ans[N];
void write(int X)
{
	if(X<0)putchar('-'),X=-X;
	if(X>9)write(X/10);
	putchar(X%10|48);
}
int read()
{
	int A;
	bool K;
	char C;
	C=A=K=0;
	while(C<'0'||C>'9')K|=C=='-',C=getchar();
	while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
	return(K?-A:A);
}
inline bool cmp(number _,number __)
{
	return _.val<__.val;
}
int main()
{
	int m,i;
	m=read();
	For(i,1,m)a[i]=read();
	For(i,1,m)b[i].val=read(),b[i].id=i;
	sort(a+1,a+m+1,greater<int>());
	sort(b+1,b+m+1,cmp);
	For(i,1,m)ans[b[i].id]=a[i];
	For(i,1,m)write(ans[i]),putchar(' ');
	return 0;
}
上一篇:解释器模式


下一篇:python_ex1基本语法