[CSP-S模拟测试]:方程的解(小学奥数)
题目描述
给出一个二元一次方程$ax+by=c$,其中$x$、$y$是未知数,求它的正整数解的数量。
输入格式
第一行一个整数$T$,表示有$T$组数据。
接下来$T$行,每行$3$个整数$a$、$b$、$c$。
输出格式
输出$T$行,每行一个数,表示方程解的数量。
如果正整数解的数量比$65535$还多,输出$“ZenMeZheMeDuo”$。
样例
样例输入:
3
-1 -1 -3
1 1 65536
1 1 65537
样例输出:
2
65535
ZenMeZheMeDuo
数据范围与提示
$20\%$的数据,$a=b=1$。
$40\%$的数据,$T \leqslant 100,1 \leqslant a,b,c \leqslant 1000$。
另$20\%$的数据,$a+b=c,1 \leqslant a,b,c \leqslant 1,000,000$。
另$20\%$的数据,$1 \leqslant a,b,c \leqslant 1,000,000$。
100%的数据,$T \leqslant 10,000,-1,000,000 \leqslant a,b,c \leqslant 1,000,000$。
题解
$20\%$算法:
对于$a=b=1$,那么解的个数为$\max(c-1,0)$,直接输出就好了。
$40\%$算法:
对于$1 \leqslant a,b,c \leqslant 1000$的数据,只需要暴力枚举$x$,$y$即可。
另$20\%$算法$1$:
对于$a+b=c$,直接输出$1$即可。
另$20\%$算法$2$:
考虑小学奥数知识,我们只需要暴力求出$x$或$y$的最小正整数解,然后每次加上$a$和$b$的$lcm$,看在$c$以内可以加多少次即可。
不过正解好像是扩展欧几里得,考场上的我并不会……
$100\%$算法:
其实是特判:
$1.$如果$a,b$异号,如果$c \mod gcd(a,b)=0$,那么会有无穷多的解,否则无解。
$2.$如果$a,b$同号但与$c$异号,那么无解。
$3.$如果$a$或$b$等于$0$,如果$c$可以整除$b$且$b$为正整数,那么会有无穷多解,否则无解。
代码时刻
- #include<bits/stdc++.h>
- using namespace std;
- int a,b,c;
- int ans;
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d%d%d",&a,&b,&c);
- if(c<0)a=-a,b=-b,c=-c;//方便处理
- if((long long)a*b<0LL)//a,b异号,注意开long long,否则会爆
- {
- if(c%__gcd(a,b))puts("0");
- else puts("ZenMeZheMeDuo");
- continue;
- }
- if(a<0&&b<0)//a,b同号但与c异号
- {
- puts("0");
- continue;
- }
- if(!a)//为0的情况
- {
- if(c%b||c/b<0)puts("0");
- else puts("ZenMeZheMeDuo");
- continue;
- }
- if(!b)
- {
- if(c%a||c/a<0)puts("0");
- else puts("ZenMeZheMeDuo");
- continue;
- }
- if(a+b==c)
- {
- puts("1");
- continue;
- }
- int biu=c;
- int lcm=a*b/__gcd(a,b);
- for(int i=a;i<=c;i+=a)
- if(!((c-i)%b)){biu=i;break;}
- if(biu==c){puts("0");continue;}//无解
- ans=(c-biu)/lcm;
- if((c-biu)%lcm)ans++;
- if(ans>65535)puts("ZenMeZheMeDuo");//判断解的个数
- else printf("%d\n",ans);
- }
- return 0;
- }
rp++
[CSP-S模拟测试]:方程的解(小学奥数)的更多相关文章
- python基础===一道小学奥数题的解法
今早在博客园和大家分享了一道昨晚微博中看到的小学奥数题,后来有朋友给出了答案.然后我尝试用python解答它. 原题是这样的: 数学题:好事好 + 要做好 = 要做好事,求 “好.事.做.要”的值分别 ...
- 【GDKOI2017】 两个胖子萌萌哒 小学奥数题
题目大意:给你一个$n\times m$的网格,你要在这个网格上画三角形. 三角形的顶点只能在网格的整点上,且至少有一条边平行于$x$或$y$轴,且三角形面积为整数.问你能画多少个不同的三角形. 两个 ...
- luogu 1258 小车问题 小学奥数(?)
题目链接 题意 甲.乙两人同时从A地出发要尽快同时赶到B地.出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人.已知甲.乙两人的步行速度一样,且小于车的速度.问:怎样利用小车才能使两人尽快同时到 ...
- NOI上看到的几个小学奥数
:余数相同问题 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同 ...
- NOIp 数学 (小学奥数)
Basic knowledge \[ C_n^m=\frac{n!}{m!(n - m)!} \] 快速幂 // Pure Quickpow inline int qpow(int n, int m, ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- 模拟7题解 T1方程的解
方程的解 [扩展欧几里德] 首先进行特判,两个小时基本想到了,除了a!=0,b==0,a*c<0这种情况 其次就是一般情况: 首先exgcd求出ax+by=GCD(a,b)的一组任意解 然后两边 ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- Spring MVC测试框架详解——服务端测试
随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用sp ...
随机推荐
- Win10使用自带功能创建系统映像备份时D盘被包含进去问题的解决
在使用Windows10系统时,使用Windows自带功能创建系统映像备份文件时碰到了一些问题,所以在此记录一下. 创建系统映像文件的步骤,如下: 1.打开 控制面板 -> 选择 系统和安全 - ...
- CF和OF的区别
进位标志CF和溢出标志OF的区别: 有符号数和无符号数只是认为的进行区分,计算机从来不区分有符号数和无符号数.对于运算的数来说,只要符合进位的情况,CF就置1.只要符合溢出的情况,OF就置1.但是后续 ...
- Spark出现java.lang.stackoverflowerror的解决方法
正在测试的程序需要多次迭代(400+次),每次迭代有复杂的运算 迭代到100多次的时候报java.lang.stackoverflowerror的错误 解决方法:先checkpoint()再count ...
- Vue:Elementui中的Tag与页面其它元素相互交互的两三事
前言 公司系统在用elementui做后台开发,不免遇到一些需要自己去根据原有的功能上,加一些交互的功能.今天来介绍下我在用elementUi里的Tag标签与多选框交互的过程,东西听上去很简单,但就是 ...
- IDEA 增加对JPA的支持 执行JPQL语句
IDEA 可以在控制台console中执行JPQL语句: 1. 在已存在的项目中选择项目结构: 2. 选择模块-指定实体所在的模块-选择上面的号 2. 选择要添加的模块:我们使用的是JPA,也可能有的 ...
- [七月挑选]使用idea创建spring boot 项目
title: 使用idea创建spring boot 项目 参考lindaZ的IntelliJ IDEA 创建spring boot 的Hello World 项目 1.Open IDEA,choos ...
- How Does Caching Work in AFNetworking? : AFImageCache & NSUrlCache Explained
http://blog.originate.com/blog/2014/02/20/afimagecache-vs-nsurlcache/
- git设置Eclipse中忽略的文件
GitHub 官网样例文件https://github.com/github/gitignorehttps://github.com/github/gitignore/blob/master/Java ...
- C scanf 函数的其他使用注意点
1.scanf 函数中没有精度控制,如: scanf("%5.2f", &a )是非法的,不能企图用此语句数据小数位2位的实数 2.scanf中要求给出变量地址,如给出变量 ...
- 004-sed 命令使用
sed 命令使用 主要作用是用来将数据进行选取,替换,删除,新增的命令,与vim类似 选项: -n : 只显示经过sed处理的数据,打印到屏幕 -e: 运行多个条件同时运行 -i: 直接修改文件 -p ...