数学思维——cf1244C
可惜cf不能用int128,不然这个题就是个exgcd的板子题
这是exgcd的解法,但是只用ll的话会溢出
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll x,y,z,a,b,c,d,n; ll exgcd(ll a,ll b,ll &x,ll &y){//返回(a,b)
if(b==){x=,y=;return a;}
ll d=exgcd(b,a%b,x,y);
ll z=x;x=y,y=z-a/b*y;
return d;
} int main(){
cin>>n>>c>>a>>b;//1e12,c:1e17,a:1e5,b:1e5
d=__gcd(a,b);
if(c%d!=){
puts("-1");return ;
} exgcd(a,b,x,y);
//923399641127 50915825165227299 94713 49302
x*=c/d;y*=c/d;
ll mod1=b/d,mod2=a/d; //先让x,y都变成非负整数
if(x<){
ll k;
if(x%mod1==)k=abs(x/mod1);
else k=abs(x/mod1)+;
x+=k*mod1;
y-=k*mod2;
}
else if(y<){
ll k;
if(y%mod2==)k=abs(y/mod2);
else k=abs(y/mod2)+;
x-=k*mod1;
y+=k*mod2;
} if(x< || y<){
puts("-1");return ;
}
if(x>n && y>n){
puts("-1");return ;
}
//让x+y的值取到最小值
if(mod1>mod2){
ll k=x/mod1;
x-=k*mod1;
y+=k*mod2;
}
else {
ll k=y/mod2;
x+=k*mod1;
y-=k*mod2;
}
if(x+y>n){puts("-1");return ;}
cout<<x<<" "<<y<<" "<<n-x-y<<"\n";
}
这是直接枚举的办法
/*
ax+by=c;
x+y+z=n;
b<a<=1e5; c<=1e17; n<=1e12
性质:如果有解,那么一定有y<a的一个解
假设有解 (x,y=y'+a)
ax+b(y'+a)=c
ax+by'+ba=c;
a(x+b)+by'=c,即必定有一个解是(x+b,y')
所以枚举y=[0,a-1]即可
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,a,b,c;
int main(){
cin>>n>>c>>a>>b;
for(ll y=;y<a;y++){
ll t=c-b*y;
if((t>=) && t%a==){
ll x=t/a;
if(x+y<=n){
cout<<x<<" "<<y<<" "<<n-x-y;
return ;
}
}
}
puts("-1");
}
数学思维——cf1244C的更多相关文章
- 程序设计中的数学思维函数总结(代码以C#为例)
最近以C#为例,学习了程序设计基础,其中涉及到一些数学思维,我们可以巧妙的将这些逻辑问题转换为代码,交给计算机运算. 现将经常会使用到的基础函数做一总结,供大家分享.自己备用. 1.判断一个数是否为奇 ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
- UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律
UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...
- B. Tell Your World(几何数学 + 思维)
B. Tell Your World time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- hdu 4710 Balls Rearrangement (数学思维)
意甲冠军:那是, 从数0-n小球进入相应的i%a箱号.然后买一个新的盒子. 今天的总合伙人b一个盒子,Bob试图把球i%b箱号. 求复位的最小成本. 每次移动的花费为y - x ,即移动前后盒子编号 ...
- F. Multicolored Markers(数学思维)
思维:思维就是将大的矩形放在小矩形里面,让大矩形的宽和长尽量靠近. 很容易得到 (a+b)% i = 0 的话, 保证了大矩形的形成,同时里面表示了两种情况:1, a % i =0, b % i=0; ...
- Pythagorean Triples毕达哥斯拉三角(数学思维+构造)
Description Katya studies in a fifth grade. Recently her class studied right triangles and the Pytha ...
- HDU - 6409:没有兄弟的舞会(数学+思维)
链接:HDU - 6409:没有兄弟的舞会 题意: 题解: 求出最大的 l[i] 的最大值 L 和 r[i] 的最大值 R,那么 h 一定在 [L, R] 中.枚举每一个最大值,那么每一个区间的对于答 ...
- Wannafly交流赛1 B 硬币[数学思维/贪心]
链接:https://www.nowcoder.com/acm/contest/69/B来源:牛客网 蜥蜴的生日快到了,就在这个月底! 今年,蜥蜴的快乐伙伴之一壁虎想要送好多个1元硬币来恶整蜥蜴. 壁 ...
随机推荐
- 百度链接提交主动推送 c#实现
说明:此方法适合百度站长,利用此方法可以第一时间将你的原创文章上传到百度,保护你的著作权,也可以帮你的网站进行引流 以下是代码实现: /// <summary> /// 提 ...
- layui导出表格全部数据
layui自带的导出表格,只能导出当前页面,如果当前页包含全部数据,那不就是导出全部数据了吗,所以我给导出事件单独定义了一个请求,当触发这个请求时,在后台查询数据时不要按接收的page 和 limit ...
- Promise、async、await 异步解决方案
参考: https://www.cnblogs.com/CandyManPing/p/9384104.html 或 https://www.jianshu.com/p/fe0159f8beb4(推 ...
- Wireshark协议分析1
一.界面简介 1.抓包工具栏 2.文件工具栏 3.包定位工具栏 4.颜色以及滚动界面工具栏 5.数据包列表字体定义工具栏 6.首选项工具栏 二.过滤规则 1.过滤 IP ip.src eq 192 ...
- Least Common Ancestors
/* Least Common Ancestors * Au: Small_Ash */ #include <bits/stdc++.h> using namespace std; con ...
- [CSP-S模拟测试58]题解
以后题解还是单独放吧. A.Divisors 根号筛求所有数的因子,扫一遍去重统计即可. #include<cstdio> #include<iostream> #includ ...
- Vue.config.optionMergeStrategies 用法分析
举个例子,假设有个对象,他叫objA, 技能是说hello,他喜欢的女生叫小花,但是他是一个花心的人! objA = { name: 'objA ', sayHello_ () { console.l ...
- 关于最近练习PYTHON代码的一点心得
做测试以来,一直想学习代码,以前也断断续续的学习过,不过都是练习一些基础语法,学习的是菜鸟教程,但是效果不大. 最近在练习CODEWAR里做练习题,慢慢强化自己对一些基本语法的理解,熟悉基本的内置函数 ...
- Linux C遇到的常见错误
此随笔主要记录一些Linux C遇到的常见错误,便于debug问题或自己编程时,避免发生类似的错误或问题,后续会持续更新.... 1.内存泄露问题 内存泄露是由于内存没有释放导致程序耗内存一直增大,引 ...
- HTML5: HTML5 应用程序缓存
ylbtech-HTML5: HTML5 应用程序缓存 1.返回顶部 1. HTML5 应用程序缓存 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线 ...