Two Bags of Bread
时间限制: 5 Sec 内存限制: 128 MB题目描述
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
思路: 终于有能股秒的题目了、。 痛的领悟 ,,: 可以枚举(x+y)/k=c 枚举c
代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define M 100000+5
#define ll long long
using namespace std;
int main()
{
int x,y,k,n;
while(~scanf("%d%d%d",&y,&k,&n))
{
int exist=0;
for(int c=0;c<=M;c++)// 整除,,所以可以为0
{
x=c*k-y;
if(x>=1&&x+y<=n)
{
exist=1;
printf("%d ",x);
}
}
if(!exist) printf("-1\n");
else putchar('\n');
}
return 0;
}