标签:first ref cst getch char solution spl iostream namespace
关于考试总结
见总结
解出一元二次方程ax+by=c的一组解(x0, y0),使|x0+y0|最小。
共一行,三个整数a,b,c。
共一行,为|x0+y0|的最小值。
若无解输出“kito”。
1 1 1
1
有\(30\%\)的数据 \(a,b\)均为质数,\(c=1\)
另有\(20\%\)的数据 \(a,b,c\)均为质数
\(100\%\)的数据 \(a,b,c<=1,000,000,000\)
这个题正解有点ex
yxy随手推了一个式子
分两种情况
在写代码的时候,需要分别讨论两种情况
然后暴力直接跑\(1e9\)
复杂度、、、\(O(Input)\)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define int long long
using namespace std;
inline int read(){
int x = 0, w = 1;
char ch;
for(; ch > ‘9‘ || ch < ‘0‘; ch = getchar()) if(ch == ‘-‘) w = -1;
for(; ch >= ‘0‘ && ch <= ‘9‘; ch = getchar()) x = x * 10 + ch - ‘0‘;
return x * w;
}
signed main(){
int a = read(), b = read(), c = read();
if(c == 0) return cout << "0\n", 0;
if(a == b){
if(c % a == 0)
cout << c / a << endl;
else cout << "kito\n";
return 0;
}
for(int i = 0; i <= 1e9; i++){
if((c - i * a) % (b - a) == 0){
int y = (c - i * a) / (b - a);
int x = i - y;
if(a * x + b * y == c)
return cout << i << "\n", 0;
}
if((c + i * a) % (b - a) == 0){
int y = (c + a * i) / (b - a);
int x = - i - y;
if(a * x + b * y == c)
return cout << i << "\n", 0;
}
}
cout << "kito\n";
return 0;
}
标签:first ref cst getch char solution spl iostream namespace
原文地址:https://www.cnblogs.com/rui-4825/p/13411667.html