网站建设捌金手指花总八建设旅游景点的网站的好处
网站建设捌金手指花总八,建设旅游景点的网站的好处,电子商务专业就业方向专科,网站弹窗在中间位置题目描述
原题来自#xff1a;HAOI 2008
有 n个小朋友坐成一圈#xff0c;每人有 ai 颗糖果。每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 1 。求使所有人获得均等糖果的最小代价。
输入格式
第一行有一个整数 #xff0c;n表示小朋友个数#xff1b; …题目描述
原题来自HAOI 2008
有 n个小朋友坐成一圈每人有 ai 颗糖果。每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 1 。求使所有人获得均等糖果的最小代价。
输入格式
第一行有一个整数 n表示小朋友个数
在接下来 n行中每行一个整数 。
输出格式
输出使所有人获得均等糖果的最小代价。
样例
样例输入
4
1
2
5
4样例输出
4数据范围与提示
对于 30% 的数据n1000
对于100% 的数据n10^9保证答案可以用64 位有符号整数存储。
题目链接https://loj.ac/problem/10010
对于这道emmmm据说是小学奥赛题我看博客半小时才弄通最后发现是自家会长的博客O(∩_∩)O哈哈~
跪拜大佬https://blog.csdn.net/qq_41890797/article/details/90244567
我对这道数学题的思路
1.设未知数 2.求公式3.求中位数的负数^_^ha大废话显然觉的这道题有很多值得深入挖掘的性质比如每个人最终的状态求个平均值就好了 。那么先不考虑算法好像也不涉及算法而是研究一波题面。 1.显然代价的计算是一个麻烦的事情。我认为代价的计算应该是与路径有关而不是与人有关。也就是说我们关心的是两个人之间的路径上糖果移动的情况可以设XiAi—Ai1为糖果的路径转移。 2.我又发现一条路径上糖果的移动方向只有一个可以用正负来表示。接着我们还发现只要知道了一条路径上糖果的移动情况那么其他路径也是可以推出来的。 这时公式已经出来了也就是求出平均数然后列出每一条路径的糖果运送情况得到的得到固定值Si的中位数让Xn为中位数的相反数即可
每人每次传递一个糖果代价为1 推公式过程 本题用到递推和贪心的算法思想偏重对数学思维的检测。 1.需要注意的题中条件 1.首先要明确n个人围成环坐 2.只能左右传递 3.使得每个人得到均等的饺子ave 2.找出递推式 1关注的每两个人之间的路径上饺子移动的情况。 2 设第i个人会给第i1个人xi个糖果带符号即下图那么 ai-xixi-1ave; 1 2 3 4 初始值 1 2 5 4 最终值 3 3 3 3 移动情况-2 -1 2 1 3将所有的式子列出来然后每一个做一个前缀和:那么xn−xi∑ai−ave。 5 变形xixn−∑ai−ave。∑ai−ave为一个常量简写为k 4找到递推式要求∑|xi|最小实际上就是要求∑|xn−k|最小 。利用绝对值的几何意义那么xn取这些常量k里的中位数时愤怒值有最小值.
上代码
#includestdio.h
#includestring.h
#includealgorithm
using namespace std;
typedef long long ll;
const int M1e610;
int a[M],s[M];
int main()
{int n;ll sum0;scanf(%d,n);for(int i1; in; i){scanf(%d,a[i]);suma[i];}ll avesum/n,ans0;for(int i1; in; i)s[i](a[i]-ave)s[i-1];///减平均值后的前缀和sort(s1,s1n);///为求中位数for(int i1; in; i)ansabs(s[i](-s[(n1)1]));///找s[(n1)1]为中位数的负数printf(%lld\n,ans);return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90222.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!