Friends and Cookies(第二次組隊賽)
Abood's birthday has come, and his n friends are aligned in a single line from 1 to n, waiting for their cookies, Abood has x cookies to give to his friends.
Here is an example to understand how Abood gives away the cookies. Suppose Abood has 4 friends and x cookies, then Abood will do the following:
- Give a cookie to the 1st friend.
- Give a cookie to the 2nd friend.
- Give a cookie to the 3rd friend.
- Give a cookie to the 4th friend.
- Give a cookie to the 3rd friend.
- Give a cookie to the 2nd friend.
- Give a cookie to the 1st friend.
- Give a cookie to the 2nd friend.
- And so on until all the x cookies are given away.
Your task is to find how many cookies each friend will get. Can you?
Input
The first line contains an integer T (1 ≤ T ≤ 100) specifying the number of test cases.
Each test case consists of a single line containing two integers x and n (1 ≤ x ≤ 1018, 1 ≤ n ≤ 1000), in which x is the number of cookies Abood has, and n
Output
For each test case, print a single line containing n space-separated integers a1, ..., an, in which ai represents how many cookies the ithfriend got.
Example
input
1 5 3
output
2 2 1
這道題不是我做的,從始至終沒有好好的看我隊友的程式碼,很後悔。賽後發現只考慮差一種情況。
題意:迴圈分x個東西給n個人,只要找到規律就好啦。注意特判一下只有一個人的情況。
ac程式碼:
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int k;
long long x,n,a,b,i,j,t[1005];
scanf("%d",&k);
while(k--)
{
scanf("%lld %lld",&x,&n);
if(n==1)
{
printf("%lld\n",x);
continue;
}
a=x/(2*n-2);
b=x%(2*n-2);
for(i=1; i<=n; i++)
{
if(i==1)
t[i]=a;
else if(i==n)
t[i]=a;
else
t[i]=2*a;
}
if(b<=n)
{
for(i=1; i<=b; i++)
{
t[i]++;
}
}
else
{
for(i=1; i<=n; i++)
t[i]++;
i--;
for(j=n+1; j<=b; j++)
t[--i]++;
}
for(i=1; i<=n; i++)
{
if(i!=n)
printf("%lld ",t[i]);
else
printf("%lld\n",t[i]);
}
}
return 0;
}