博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
糖果传递
阅读量:4665 次
发布时间:2019-06-09

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

有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。

 

1号小朋友给了n号小朋友x1颗糖

2号小朋友给了1号小朋友x2颗糖

……

那么ans=|x1|+|x2|+|x3|……+|xn|

设ai-average=ci;

a1+x2-x1=average

变形得

x1-c1=x2;

x2-c2=x3=>x1-c1-c2=x3

……

x1-(c1+c2+……+cn)=x1;

那么

ans=|x1-c1|+|x1-(c1+c2)|+|x1-(c1+c2+c3)|+……|x1|

这不就是个中位数水题吗

看我一发A了它

#include
#define re return#define ll long long #define inc(i,l,r) for(int i=l;i<=r;++i)using namespace std;template
inline void rd(T&x){ char c;bool f=0; while((c=getchar())<'0'||c>'9')if(c=='-')f=1; x=c^48; while((c=getchar())>='0'&&c<='9')x=x*10+(c^48); if(f)x=-x;} ll n,T,a[1000005],b[1000005]; int main(){ freopen("in.txt","r",stdin); ll average=0; rd(n); inc(i,1,n) { rd(a[i]); average+=a[i]; } average/=n; inc(i,1,n) b[i]=b[i-1]+a[i]-average; sort(b+1,b+n+1); ll mid=b[(n+1)>>1],ans=0; inc(i,1,(n+1)>>1) ans+=mid-b[i]; inc(i,((n+1)>>1)+1,n) ans+=b[i]-mid; printf("%lld",ans); re 0;}

 

转载于:https://www.cnblogs.com/lsyyy/p/11437358.html

你可能感兴趣的文章
Java反射机制
查看>>
Servlet笔记
查看>>
纯css3代码写无缝滚动效果
查看>>
KMP解决最小循环节问题
查看>>
android Fragments详解二:创建Fragment
查看>>
需求分析文档(3月22日)
查看>>
【剑指offer】丑数
查看>>
JAVA-JSP注释
查看>>
latch: shared pool等待事件
查看>>
根据繁忙程度来选择快照的id
查看>>
服务器MySql搭建
查看>>
checkbox控制text是否可以填写和radio是否可选
查看>>
P3811 【模板】乘法逆元
查看>>
ORACLE 行迁移和行链接
查看>>
MSSQL跨服務器複製數據
查看>>
Javascript(js) dateDiff 日期减法函数
查看>>
第四百七十四天 how can I 坚持
查看>>
ASP.NET - 回滚事务
查看>>
Xshell 乱码
查看>>
delphi10.3.1不支持.net 5
查看>>