A. Required Remainder
题目链接-A. Required Remainder
题目大意
给定
x
,
y
x,y
x,y和
n
n
n,你需要找到从
0
0
0到
n
n
n的最大可能整数
k
k
k,使得
k
k
k
m
o
d
mod
mod
x
x
x的值为
y
y
y,即
k
/
x
k/x
k/x的余数为
y
y
y
解题思路
- 因为要找满足条件的最大整数,所以我们可以先找满足 a a a m o d mod mod x = 0 x=0 x=0的最大整数 a a a,记 a = n / x , b = n a=n/x,b=n a=n/x,b=n % x x x
- 然后我们可以判断余数 b b b是否大于等于 y y y,如果 b ≧ y b≧y b≧y,那么 a ∗ x + y a*x+y a∗x+y,即 n − ( b − y ) n-(b-y) n−(b−y)一定小于等于 n n n,所以满足题意的最大整数 k = n − ( b − y ) k=n-(b-y) k=n−(b−y)
- 否则 a ∗ x + y a*x+y a∗x+y大于 n n n,此时满足题意的最大整数 k = ( a − 1 ) ∗ x + y k=(a-1)*x+y k=(a−1)∗x+y
- 具体操作见代码
附上代码
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
#define endl '\n'
using namespace std;
const int INF=0x3f3f3f3f;
const int dir[4][2]={-1,0,1,0,0,-1,0,1};
const double PI=acos(-1.0);
const double e=exp(1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=2e5+10;
typedef long long ll;
typedef pair<int,int> PII;
typedef unsigned long long ull;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t;
cin>>t;
while(t--){
int x,y,n,ans;
cin>>x>>y>>n;
int a=n/x;
int b=n%x;
if(b>=y) ans=n-(b-y);
else ans=(a-1)*x+y;
cout<<ans<<endl;
}
return 0;
}