[CF Contest] Required Remainder 题解

题面:给出 \(x\)\(y\)\(n\), 找到最大的 \(k\) 知足 \(0\le k\le n\)\(k \mod{x}=y\)c++

咱们考虑从取模的性质下手。spa

首先来分析 \(x=7,y=5,n=12345\) 这组数据,\(12345\mod7\)\(5\) 小,因此考虑减去 \((n \mod{x})+x-y\) ,即须要减去的最小值,由于 \(n \mod{x}\) 要余 \(y\) 的话确定只能减不能增,要减去的就是取模后的结果加模数减去余数。code

接着分析 \(x=5,y=0,n=4\) ,由于 \(x>n\) ,因此输出 \(y\) 便可。ci

而后若是 \(n\mod{x}>y\) 时,便只用减去 \(y\) 便可。it

代码就先放着,反正看懂题解的也不须要代码。class

#include <bits/stdc++.h> 
using namespace std;
int main(){
	int T;
	cin>>T;
	while(T--){
		int x,y,n,k=0;
		cin>>x>>y>>n;
		if(x>n) cout<<y<<endl;
		else if(n%x<y)cout<<n-(n%x+x-y)<<endl;
		else cout<<n-(n%x-y)<<endl;
	}
}
相关文章
相关标签/搜索