这题还是比较水的,但是我旁边的巨佬一开始竟然 TLE 了,所以还是不能小看这道题!
题意:就是让你把 ( x + y ) m o d k = 0 (x + y) \mod k = 0 (x+y)modk=0 的各种 x x x 值算出来输出。但是如果直接从 1 开始每次加 1 搜的话 TLE 就会跑过来和你玩。那怎么做呢?首先找到 x + y = k x + y = k x+y=k 的情况然后 x x x 每次加上 k k k 这样子就可以过了。
代码:
#include<bits/stdc++.h>
using namespace std;
int k,y,n,x,i,m;
inline int read(){//快读
int s = 0,f = 1;
char ch = getchar();
while(ch < '0'||ch > '9'){
if(ch=='-'){
f=-1;
}
ch = getchar();
}
while(ch >= '0'&&ch <= '9'){
s = s * 10 + ch - '0';
ch = getchar();
}
return s * f;
}
inline void write(int x){//快写
if(x < 0){
putchar('-');
x = -x;
}
if(x > 9){
write(x / 10);
}
putchar(x % 10 + '0');
}
int main(){
y = read();
k = read();
n = read();
i = k - y;
for(;i + y <= n;i += k){
if(i >= 1){//题目中说了i 不能小于1
write(i);
printf(" ");
m = 1;
}
}
if(m == 0){
printf("-1");
}
return 0;
}
靠着 816ms 拿到了最优解第一,第二就是我旁边的巨佬。