题意:你被给予了三个整数x,y和n。你的任务是找到一个最大的k,满足(0 <= k <= n),使得(kquad modquad x = y)。
分析:令k = p * x + y,满足k <= n,即(p * x + y <= n),那么(p = lfloor frac{n - y}{x} floor),然后求出这个p之后,就可以求出k了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
using LL = long long;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
LL x, y, n;
cin >> x >> y >> n;
LL p = (n - y) / x;
if (p * x + y <= n)
{
cout << p * x + y << endl;
}
else
{
cout << p * (x - 1) + y << endl;
}
}
return 0;
}