AcWing——糖果传递
Posted scau_igtim
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing——糖果传递相关的知识,希望对你有一定的参考价值。
有 n个小朋友坐成一圈,每人有 a[i]个糖果。
每人只能给左右两人传递糖果。
每人每次传递一个糖果代价为 1。
求使所有人获得均等糖果的最小代价。
输入格式
第一行输入一个正整数 n,表示小朋友的个数。
接下来 n 行,每行一个整数 a[i],表示第 i个小朋友初始得到的糖果的颗数。
输出格式
输出一个整数,表示最小代价。
数据范围
1≤n≤1000000
0≤a[i]≤2×109
数据保证一定有解。
输入样例:
4
1
2
5
4
输出样例:
4
题意:
ai向ai+1传递xi个通过(xi可正可负),求abs(x1)+abs(x2)+...+abs(xn)的最小值
分析:
一大堆数学证明我证不过来,所以直接给结论吧。
要求
|x1|+|x2|+...+|xn|最小值,
即求
|xn-b-a1|+|xn-2b-a1-a2|+|xn-nb-a1-a2-...-an|
将该问题转换为
货仓选址问题即可
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll a[N],b,c[N];
int main()
int n;
cin>>n;
for(int i=1;i<=n;++i)
cin>>a[i];
b+=a[i];
a[i]+=a[i-1];
b/=n;
for(int i=1;i<=n;++i)
c[i]=i*b-a[i];
sort(c+1,c+n+1);
ll d=c[n/2+1];
ll res=0;
for(int i=1;i<=n;++i)
res+=abs(c[i]-d);
cout<<res;
return 0;
Acwing第 61 场周赛完结
https://www.acwing.com/activity/content/competition/problem_list/2079/
T3,向量知识点有点忘了。
目录
4497. 分糖果
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
int main(void)
LL t,a,b,c; cin>>t;
while(t--)
cin>>a>>b>>c;
cout<<(a+b+c)/2<<'\\n';
return 0;
4498. 指针【二进制枚举】
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=25;
int a[N],n,flag;
int main(void)
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<(1<<n);i++)
int sum=0;
for(int j=0;j<n;j++)
if(i>>j&1) sum=(sum+a[j])%360;
else sum=(sum-a[j]+360)%360;
if(!sum) flag=1;
if(flag) puts("YES");
else puts("NO");
return 0;
4499. 画圆【计算几何】
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
int cmp(double x, double y)
if (fabs(x - y) < eps) return 0;
if (x < y) return -1;
return 1;
int main(void)
double r,x,y,x1,y1;
cin>>r>>x>>y>>x1>>y1;
double dx=x1-x;
double dy=y1-y;
double d=sqrt(dx*dx+dy*dy);
if(cmp(d,r)>=0) printf("%.6lf %.6lf %.6lf",x,y,r);
else
if(!cmp(x,x1)&&!cmp(y,y1)) printf("%.6lf %.6lf %.6lf",x+r/2,y,r/2);
else
double len=(r+d)/2;
double ans1=x1+(x-x1)/d*len;
double ans2=y1+(y-y1)/d*len;
printf("%.6lf %.6lf %.6lf",ans1,ans2,len);
return 0;
以上是关于AcWing——糖果传递的主要内容,如果未能解决你的问题,请参考以下文章