码迷,mamicode.com
首页 > 其他好文 > 详细

2020.07.31模拟11

时间:2020-07-31 19:26:00      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:first   ref   cst   getch   char   solution   spl   iostream   namespace   

关于考试总结
总结

A. 解方程

题目描述

解出一元二次方程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\)

solution

这个题正解有点ex
yxy随手推了一个式子

\[ax+by=c \]

\[|x+y|=i \]

分两种情况

  • First

\[x=i-y \]

\[a(i-y)+by=c \]

\[a*i-ay+by=c \]

\[(b-a)y=c-a*i \]

\[y= \frac {c-a*i} {b-a} \]

  • Second

\[x=-i-y \]

\[y = \frac {c+a*i} {b-a} \]

在写代码的时候,需要分别讨论两种情况
然后暴力直接跑\(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;
}

2020.07.31模拟11

标签:first   ref   cst   getch   char   solution   spl   iostream   namespace   

原文地址:https://www.cnblogs.com/rui-4825/p/13411667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!