p1044与p1898
数论好难啊~~
嗯这两道题看似题号、数据范围差的很多,其实有一些共通之处。
先来看一下韩信点兵:
作为循环语句和判断语句的入门题,相信看我博客的肯定都会。
#include<iostream> using namespace std; int a,b,c,i; int main() {cin>>a>>b>>c;for(i=7+c;i<=100;i=i+7){if((i%3==a)&&(i%5==b)&&(i>=10)&&(i<=100)){cout<<i<<endl;return 0;}}cout<<"No answer"<<endl; return 0; }
根本没必要贴出来的好吧
下面来介绍一下直接算答案的强方法了。
ans需要满足三个条件%3==a、%5==b,%7==c;
那能不能构造出三个数,分别满足一个其中条件并且是另外两个数的公倍数?(这句话是本篇中最重要的话了,其他都是废话)
比如满足第一个条件的数要求为5和7的倍数,也就是35的倍数。还要%3==a,现在35%3已经等于2了,难道要35*a/2?(我知道a只可能等1 2)不如往后找一找,说不定有%3=1的好数。然后70就是了,很棒。那第一个数就是70*a了。
然后由于21%5==1,15%7==1,刚好。那么最后答案就是(70*a+21*b+15*c)%105。
本题中要求10到100之间的,加个判断就行。
1 #include<iostream> 2 using namespace std; 3 int a,b,c,ans; 4 int main() 5 { 6 cin>>a>>b>>c; 7 ans=(70*a+21*b+15*c)%105; 8 if(ans>=10&&ans<=100) cout<<ans; 9 else cout<<"No answer"<<endl; 10 return 0; 11 }
这道题的思想再推广一点会怎么样呢?那就是p1898了。
看不懂题解怎么办啊?没关系,往下看。
我们先处理出所有的a的累乘sum(应该不是sum吧但是我不知道用什么),对每个数找出sum/a[i]的倍数中%a[i]==1的,乘对应的b[i]是满足第i个条件的数。全部相加后对sum取余即为所求。\
果然还是看不懂就对着代码看.
这个代码的复杂度好迷啊...如果要写的话还是学一下exgcd吧(18/12/10);
#include <cstdio> #include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> using namespace std; int i,f; long long wyt(long long x,long long y,long long z) {if(y==1)return 0;for(f=0;;f++)if(x*f%y==1)break;return f*x*z; } long long ans,sum=1; int n; long long a[11],b[11]; int main() { //freopen("123.in","r",stdin); //freopen("123.out","w",stdout);cin>>n;for(i=1;i<=n;i++){ cin>>a[i]>>b[i];sum*=a[i];}for(i=1;i<=n;i++){ans+=wyt(sum/a[i],a[i],b[i]);}cout<<ans%sum; }
由于数较少,就不用快读了哈。
转载于:https://www.cnblogs.com/qywyt/p/9019190.html
p1044与p1898相关推荐
- 洛谷——P1044 栈
P1044 栈--卡特兰数 题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈) ...
- [Catalan]求解随机出栈可能数(洛谷P1044题题解,Java语言描述)
题目要求 P1044题目链接 分析 题意就是:N个数依次进栈,可随机出栈,算一下可能的出栈序列数. 其实这个就是Catalan啊,如果数据结构与算法有一定的刷题积累的学生应该经常做这样的About栈的 ...
- 信息学奥赛一本通 1924:【03NOIP普及组】栈 | 洛谷 P1044 [NOIP2003 普及组] 栈
[题目链接] ybt 1924:[03NOIP普及组]栈 洛谷 P1044 [NOIP2003 普及组] 栈 [题目考点] 递推.递归 栈 [解题思路]:一维递推 设数组a,a[i]表示i个数组成的数 ...
- [ CodeVS冲杯之路 ] P1044
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1044/ 机房连续断网,搞得现在才能上博客-- 很经典的DP题,把问题转换一下就是分别求最不降序列和最长上升序列 f[i ...
- 洛谷 P1044 栈 [卡特兰数]
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即 poppop (从栈顶弹出一个元素)和 pushpush (将一个元素进栈). 栈 ...
- [洛古]P1044 栈
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈). 栈的重要性不言自明, ...
- 刷题 - 基础数学/数论问题
突然发现我对于数学相关的问题什么排列组合什么的都不会,主要是我高中排列组合什么的没怎么学,高考数学才110,全靠理综撑着 .而比赛中数学又占据了很大一部分,所以我决定先补一下基础,先刷20道基础题再说 ...
- 洛谷【算法1-4】递推与递归
P1255 数楼梯 对于 100% 的数据,1≤N≤5000. 高精度斐波那契 #include <iostream> using namespace std;const int N = ...
- #中队列的数据结构_数据结构与算法拓展(一)
栈与队列 申明:由于篇幅限制,文章可能有些简略,如果大家想要详细了解,请一定要百度一下,并阅读例题,完成习题 绪言:计算机科学在过去的数十年内发展飞速,各种新颖的技术纷至沓来:5G,VR,AI:大数据 ...
最新文章
- matlab节约里程法_芳烃产业链里程碑:唐山旭阳30万吨/年苯乙烯项目一次性开车成功...
- 【Python】Python中令人头疼的变量作用域问题,终于弄清楚了
- 「AI大咖」ML宗师乔教主,全世界最有影响力的计算机科学家
- linux-命令替换-通配符-重定向-管道
- 【BZOJ 3171】 [Tjoi2013]循环格
- 33:计算分数加减表达式的值
- Flutter自定义布局套路
- ⟅UNIX网络编程⟆⦔目录
- php 微信小程序签到功能,微信小程序每日签到
- java-导入 导出 下载模板 等功能
- Alipay Global API 境外支付宝接口对接
- 输入输入是否为回文(如“abcba”和”123321”都是回文)。(c语言)
- java 模块层次结构图_Spring框架模块结构图解析
- Stm32中英文手册官网免费
- Node.js下载安装与配置淘宝加速器cnpm
- C语言实现将彩色BMP位图转化为二值图
- HTTPS 到底加密了什么?
- MayaToUE4之影视动画制作流程
- 实用!!服务器监测邮箱报警
- Mac用Visual Studio Code编写C/C++安装配置教程