联欢会开始了,同学们按对应的组别已整齐安静的就坐。此时小Z发现为同学们准备的水果还没有派发。各小组已紧密的连成了一排,于是他想了个办法,从两端将水果一个一个传送给各组,直到满足各组水果要求个数为止。假设每秒他只能在两端各传送一个水果,求T秒后各组中的水果数。
传送办法是:各组拿到水果后都向中间方向的相邻组传送(最中间的不用传),直到相邻组满足要求为止。举例:小组数M=5,各组要求水果数K=4。
第1秒
输入
输入三个正整数,分别是组数M,每组需要的水果数K,时间T,它们的范围[1..100000]。
数据保证M为奇数,K为偶数。T<=M*K/2。
输出
输出传送T秒后,各组别的水果数。
样例输入 Copy
5 4 5
样例输出 Copy
1 2 4 2 1
放水果!~
好像没什么特别困难的地方....
直接来看代码吧 ; )
#include <algorithm>
#include <cstdio>
using namespace std;
int main(){
int m,k,t,i,c=1,mid; //c表示秒数
scanf("%d %d %d",&m,&k,&t);
int a[200005]={0};
a[1]++;
a[m]++;
mid = m/2+1;
if(t==1){
for(i=1;i<=m;i++)
printf("%d ",a[i]);
return 0;
}
for(i=2;i<mid;i++){ //从最外层往最中间开始放水果
a[i]++;
a[m-i+1]++;
c++;
if(c==t)
break;
}
i=0;
while(c<t){ //当每个小组都放了一个水果后,开始从中间往外层放水果~
if(a[mid-i]<k){
a[mid-i]++;
a[mid+i]++;
}
else{
i++;
a[mid-i]++;
a[mid+i]++;
}
c++;
if(a[1]==k){
break;
}
}
for(i=1;i<=m;i++)
printf("%d ",a[i]);
}
之前贴的代码错了 对不住胸弟们 :(