博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018 Wannafly summer camp Day2--Utawarerumono
阅读量:6564 次
发布时间:2019-06-24

本文共 1662 字,大约阅读时间需要 5 分钟。

Utawarerumono

描述

题目描述:

算术是为数不多的会让久远感到棘手的事情。通常她会找哈克帮忙,但是哈克已经被她派去买东西了。于是她向你寻求帮助。

给出一个关于变量x,y的不定方程ax+by=cax+by=c,显然这个方程可能有多个整数解。久远想知道如果有解,使得p2x^2+p1x+q2y^2+q1y最小的一组整数解是什么。为了方便,你只需要输出p2x^2+p1x+q2y^2+q1y的最小值。

输入:

第一行三个空格隔开的整数a,b,c(0a,b,c105)

第二行两个空格隔开的整数p1,p2(1p1,p2105)

第三行两个空格隔开的整数q1,q2(1q1,q2105)

输出:

如果方程无整数解,输出``Kuon’’。

如果有整数解,输出p2x^2+p1x+q2y^2+q1y的最小值。

样例输入
2 2 1 1 1 1 1
样例输出
Kuon 由于一次项的影响较小,只考虑二次项p2*x^2+q1*y^2=p2*((c-by)/a)^2+q2*y^2,存在一个O(a)的|y|的取值满足c-by是一个a的倍数, 此时|(c-by)/a|是O(c+b)的,这样就得到了一组不超过10^18的解,且答案不会更大。 后发现多项式的值在X的绝对值增加的时候,只有在x<0的时候才会变小,当x<(-p1)/2p2的值仍然会增大, 所以可以暴力枚举x或y的值(1e5就可以过了)。
1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 typedef long long ll; 8 ll p2,p1,q2,q1; 9 ll a, b, c, d, x, y;10 ll ans=1e18;11 ll Exgcd(ll a, ll b)12 {13 if(b==0){ x=1, y=0;return a;}14 ll r = Exgcd(b, a%b);15 ll tp=x;16 x = y;17 y = tp-a/b*y;18 return r;19 }20 int main()21 {22 cin>>a>>b>>c>>p1>>p2>>q1>>q2;23 d = Exgcd(a, b);24 if(a==0&&b==0&&c==0) printf("0\n");25 if(((a==0)&&(b==0)&&c) || c%d!=0 )26 printf("Kuon\n");27 else if(a&&b==0){28 if(c%a!=0){29 printf("Kuon\n");30 }else{31 ll ta=c/a;32 ll ee=p2*ta*ta+p1*ta;33 cout<
<
View Code

 

转载于:https://www.cnblogs.com/FlyerBird/p/9460227.html

你可能感兴趣的文章
《Spring 5 官方文档》26. JMS(一)
查看>>
《Python Cookbook(第2版)中文版》——1.11 检查一个字符串是文本还是二进制
查看>>
Tkinter之Label
查看>>
Java操作redis
查看>>
PostgreSQL merge json的正确姿势
查看>>
java反射
查看>>
【IOS-COCOS2D游戏开发之二】COCOS2D 游戏开发资源贴(教程以及源码)
查看>>
nodejs安装记录
查看>>
Android2.2 API 中文文档系列(9) —— ZoomButton
查看>>
pcDuino 刷系统-卡刷
查看>>
MySQL结构自动同步工具-schemasync
查看>>
关于在线代码运行网站的一个想法
查看>>
我的友情链接
查看>>
使用subeclipse来管理分支/标记
查看>>
我的友情链接
查看>>
django forms模块使用
查看>>
FreeBSD IPFW 防火墙的安装和设置
查看>>
Linux分区和文件系统 ⑥
查看>>
ClipDrawable--水漫起来的效果
查看>>
python中的import
查看>>