问题 G: Two Bags of Bread
时间限制: 5 Sec 内存限制: 128 MB题目描述
n/k
Lialosiu喜欢吃男饭面包店的面包,曾经创下一天吃15袋面包的记录。校庆那天,Lialosiu又去买了两袋面包,第一袋有x(x>=1)个面包,第二袋有y(y>=1)个面包。他是一个很粗心的人,以至于他把第一袋面包弄丢了。
幸好他记得两袋面包的总个数是不会超过n的,并且他也记得两袋面包的总个数可以被k整除。
现在告诉你第二袋面包的个数y,以及k和n,你能求出第一袋面包个数的所有可能的情况吗?
输入
第一行包含了三个整数,y,k和n。
(1 <=y, k, n <= 10 ^9 ,(n/k)<=10^5)
输出
输出一行整数,包含了所有x可能的情况,每个整数后跟一个空格。
如果x不存在,请输出一个数 -1 。
样例输入
10 1 10
10 6 40
样例输出
-1
2 8 14 20 26
#include<cstdio>
typedef long long ll;
int main()
{
ll y,k,n,i,j;
while(scanf("%lld %lld %lld",&y,&k,&n)!=EOF)
{
if(n<=y || n==1)//x>=1,y>=1,n=x+y推出这种结果无解;
{
printf("-1\n");
continue;
}
for(i=1;i<=n/k;i++)//不大于n且是k的倍数的个数;
{
ll ans=i*k;//k的倍数;
if(ans>y)//n=x+y;
printf("%lld ",ans-y);
}
printf("\n");
}
return 0;
}