Noip 2012 提高组 国王游戏

分析

看到题马上想到的就是排序,可是一直没有想出怎么排(菜)。后来去看了题解,看到是Ai*Bi从小到大排。

自己证了一下,还是很简单的。

设n个人是P1,P2---Pn。很显然可以发现若将其中两个人Px,Px+1交换位置,那么只会影响这两个人拿到的金币。

于是我们可以设相邻的两个人,第一个人的值为a,b,第二个为x,y。

那么没有交换之前ans1=max(A/b,A*a/y),交换后ans2=max(A/y,A*x/b)。

我们若要保证在不交换的情况下是最优解,那么ans1<=ans2。

显然 A/b<A*x/b,A/y<A*a/y,只需保证 A*a/y<A*x/b,也就是a*b

注意还要写个高精乘除。


代码

#include
#include
using namespace std;

#define ll long long

ll n,ka,kb,ans[1000000],mul[1000000],cnt,anscnt,cntz,z[1000000];

struct node{
	ll a,b,m;
}f[1000005];

bool cmp(node A,node B) {return A.mcntz) return;
	if (anscnt==0 && anscnt


你可能感兴趣的:(NOIP)