博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1045 糖果传递(思维)
阅读量:4510 次
发布时间:2019-06-08

本文共 1431 字,大约阅读时间需要 4 分钟。

设第i个人给了第i+1个人mi个糖果(可以为负),因为最后每个人的糖果都会变成sum/n。

可以得到方程组 mi-mi+1=a[i+1]-sum/n.(1<=i<=n).

把方程组化为mn组成的形式,最后的结果就是求min(abs(mn)+abs(mn-a[i+1]+sum/n)....)。可以看出这是一个分段函数。

且函数最值在mn取中位数的地方。

 

# include 
# include
# include
# include
# include
# include
# include
# include
# include
# include
# include
using namespace std;# define lowbit(x) ((x)&(-x))# define pi acos(-1.0)# define eps 1e-3# define MOD 1000000007# define INF (LL)1<<60# define mem(a,b) memset(a,b,sizeof(a))# define FOR(i,a,n) for(int i=a; i<=n; ++i)# define FO(i,a,n) for(int i=a; i
PII;typedef vector
VI;# pragma comment(linker, "/STACK:1024000000,1024000000")typedef long long LL;int Scan() { int res=0, flag=0; char ch; if((ch=getchar())=='-') flag=1; else if(ch>='0'&&ch<='9') res=ch-'0'; while((ch=getchar())>='0'&&ch<='9') res=res*10+(ch-'0'); return flag?-res:res;}void Out(int a) { if(a<0) {putchar('-'); a=-a;} if(a>=10) Out(a/10); putchar(a%10+'0');}const int N=1000005;//Code begin... int a[N], b[N];LL sum[N]; int main(){ int n; LL ave=0, ans=0; scanf("%d",&n); FOR(i,1,n) scanf("%d",a+i), ave+=a[i]; ave/=n; FOR(i,1,n) a[i]-=ave; FOR(i,1,n) sum[i]=a[i]+sum[i-1]; sort(sum+1,sum+n+1); LL t=sum[(1+n)>>1]; FOR(i,1,n) ans+=abs(t-sum[i]); printf("%lld\n",ans); return 0;}
View Code

 

转载于:https://www.cnblogs.com/lishiyao/p/6494907.html

你可能感兴趣的文章
MySQL系列--3.数据类型和连接查询
查看>>
servlet的url-pattern匹配规则详细描述
查看>>
jquery 进度条
查看>>
《BI那点儿事》数据流转换——查找转换
查看>>
二叉树中和为某一值的路径
查看>>
07_组件三大属性(1)_state
查看>>
学习PYTHON之路, DAY 3 - PYTHON 基础 3 (函数)
查看>>
Leetcode 416.分割等和子集
查看>>
java8 lambda 表达式
查看>>
【转】提示框第三方库之MBProgressHUD iOS toast效果 动态提示框效果
查看>>
JS对象和JSON字符串相互转化总结
查看>>
Ajax
查看>>
poj1019——log10求位数
查看>>
xdoj1065 Efficent Allocation 动态开点的线段树
查看>>
css默认值汇总
查看>>
IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)
查看>>
转 CSS兼容性(IE和Firefox)技巧大全 (二)
查看>>
jQuery源码分析:jQuery对象属性设置(attr、access、$.attr)源代码分析
查看>>
不同web应用登录方案
查看>>
利用css制作横向和纵向时间轴
查看>>