xjoi题解:P7299 分糖果
时间:1s 空间:256M
题目描述:
一个班里有n个男生站成一圈,每两个男生之间站着一个女生,共n个女生,男女生分别按顺时针编号依次为1号,2号,以此类推。i号女生站在i号和i+1号男生中间(n+1号男生即1号男生)。
老师依次给男生们发糖,每个男生会收到不少于0的偶数颗糖且会把全部糖果等量分给左右两边的女生。最后第i名女生总共收到了ai颗糖。请计算老师分别给每个男生发了多少糖。
保证n是奇数,可以证明答案唯一。
输入格式:
第一行,包含一个正整数 n,表示男、女生人数。 第二行,包含n个整数a1,a2,...,an,表示每个女生收到的糖果数。
输出格式:
输出n个整数,表示老师分别给每个男生发的糖果数。
样例1输入:
3
2 4 6
样例1输出:
4 0 8
约定与提示:
对于100%的数据,3≤n≤105−1;0≤ai≤109。
样例解释:
1,3,5位置是男生,2,4,6位置是女生,初始序列为 [4,0,0,0,8,0] ,目标序列为 [0,2,0,4,0,6]。
1号男生分别给1号和3号女生2颗糖,序列变为 [0,2,0,0,8,2]。
3号男生分别给2号和3号女生4颗糖,序列变为 [0,2,0,4,0,6]。
题意:
有n个男生和n个女生,男生将发到的糖果分给旁边的女生,给出女生最后得到糖果的状态,求出男生原来有多少颗糖果
分析:
拜托,此题一点算法都没有好吧
如样例1:3 2 4 6 得出 4 0 8,我们可以知道b1+b2=4 b2+b3=8 b1+b3=12 sum=12,这一环扣一环,我们只要得出一个就能解出所有,b1就等于总和减去b2+b3=8就可以得出
本题就是总和减去诺干个算式求出答案
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100005];
int b[100005];
int sum,cnt;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
if(i%2==0)
{
cnt+=a[i]*2;
}
}
b[1]=sum-cnt;
for(int i=2;i<=n;i++)
{
b[i]=a[i-1]*2-b[i-1];
}
for(int i=1;i<=n;i++)
{
cout<<b[i]<<" ";
}
return 0;
}