P1495 曹冲养猪
原题链接 https://www.luogu.org/problemnew/show/P1495
这个题明显的中国剩余定理(孙子定理),如果有不懂孙子定理的点这个链接https://baike.baidu.com/item/%E5%AD%99%E5%AD%90%E5%AE%9A%E7%90%86/2841597?fr=aladdin
如果不想看那么一大堆的字母也可以听我简单说一下(大佬勿喷):
中国剩余定理是求一次同余方程组的,比如本题的输入样例可以写成如下同余方程组:
x≡1 (mod 3)
x≡1 (mod 5)
x≡2 (mod 7)
那么同时满足以上三个同余方程的最小解就是本题的答案。
先求mod的数3,5,7的最小公倍数gbs是3*5*7=105 并把最小公倍数gbs写成当前mod的数*其余mod的数的积 即105=3*(5*7)=3*35=5*(3*7)=5*21=7*(3*5)=7*15;
随后我们设辅助方程
35x≡1 (mod 3) 1式 这里35是除了3这个mod数,其余mod数的积,即5*7(也可以理解成最小公倍数gbs 105/3=35),还有余数一定要为1不要问为什么
21x≡1 ( mod 5 ) 2式
15x≡1 (mod 7 ) 3式
由1式得: x≡2 (mod 3)
由2式得: x≡1 (mod 5)
由3式得: x≡1 (mod 7)
那么此题的解x≡一开始由题意列出的第一个同余方程的余数*第一个辅助方程的余数*(最小公倍数gbs/当前mod数)+......+一直到最后一个同余方程
所以x≡1*2*35+1*1*21+2*1*15≡121≡16 (mod105)
现在给出AC代码
- #include<iostream>
- #include<cstdio>
- using namespace std;
- int main()
- {
- long long n,a[],b[],s=,k=,m=,gbs=; //a数组存放猪圈数,b数组存放余猪,注意long long
- cin>>n;
- for(int i=;i<=n;i++)
- cin>>a[i]>>b[i];
- for(int i=;i<=n;i++) //因为猪圈互质,所以最小公倍数直接用每个猪圈数之积
- gbs*=a[i];
- for(int i=;i<=n;i++)
- if((a[i]==&&b[i]==)) //一步特判,如果猪圈数为1且无余猪,则说明只有1头猪 别说推不出来
- {cout<<"";return ;}
- for(int i=;i<=n;i++)
- {
- long long j=,k=;
- for(int v=;v<=n;v++)
- if(v!=i) k*=a[v]; //k为除了当前mod数本身其他mod数的积
- while((k*j)%a[i]!=) //暴力搜解,求出k*j≡1 (mod a【i】)的解
- j++;
- s=(s+b[i]*k*j)%gbs; //中国剩余定理公式,每步mod一下,防止内存爆炸
- }
- cout<<s%gbs;
- return ;
- }
P1495 曹冲养猪的更多相关文章
- [洛谷P1495] 曹冲养猪 (中国剩余定理模板)
中国剩余定理(朴素的)用来解线性同余方程组: x≡a[1] (mod m[1]) x≡a[2] (mod m[2]) ...... x≡a[n] (mod m[n]) 定义ms=m[1]*m[2]*. ...
- P1495 曹冲养猪(拓展欧几里得)
题目描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把.举个例子,假如有 ...
- 洛谷 P1495 曹冲养猪
这是一道标准的孙子定理的题,题意浅显,思路明确 然后我就交了整整16遍啊,欺负人啊,题解暴力就能过,我就TLE ..悲惨的提交记录 下面是题面 题目描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干 ...
- 洛谷——P1495 曹冲养猪
题目描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把.举个例子,假如有 ...
- 【题解】洛谷P1495 曹冲养猪 (中国剩余定理)
洛谷P1495:https://www.luogu.org/problemnew/show/P1495 思路 建立了a个猪圈 有b头猪没有去处 即x≡b(mod a) x即是ans 把所有的关系全部列 ...
- [Luogu P1495]曹冲养猪
题目链接 中国剩余定理(孙子定理)的裸题.直接放代码. #include<iostream> #include<cstdio> #include<algorithm> ...
- luogu P1495 曹冲养猪(中国剩余定理)
题意 题解 翻到了一个金句 就跟这句话说得一样,就是个裸题. 所以看模板呗. #include<iostream> #include<cstring> #include< ...
- vijosP1164 曹冲养猪
vijosP1164 曹冲养猪 链接:https://vijos.org/p/1164 [思路] 数学. 如果x不能满足模公式则+gcd,gcd=a的积(a互质)使加上gcd后依然满足前面的模公式. ...
- Vijos 1164 曹冲养猪(中国剩余定理)
P1164曹冲养猪 Accepted 标签:三国争霸[显示标签] 描写叙述 自从曹冲搞定了大象以后,曹操就開始捉摸让儿子干些事业,于是派他到中原养猪场养猪,但是曹冲满不高兴.于是在工作中马马虎虎,有一 ...
随机推荐
- Php7 开发笔记
Ubuntu环境安装 http://www.jianshu.com/p/1d312d9f1be1 sudo apt-get install python-software-properties sof ...
- 02-HTML之head标签
head标签 head内常用标签表 标签 类型 意义 <title></titile> 双闭合标签 定义网页标题 <style></style> 双闭合 ...
- P124黎曼可积性刻画 的两个备注
1.这里为什么是开集? 2.请问为什么说了是开集马上就说是有界可测函数? 开集为可测集
- HTTP协议,Http 常用状态码
一.HTTP协议-Request HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 1.1 HTTP请求报 ...
- Zk搭建(Zookeeper)
第一步: 上传----解压 tar -zxvf zookeeper-3.4.5.tar.gz---- 配置zk的环境变量 ----------配置源码 vim ...
- Java对象的创建、内存布局和访问定位
在Java运行时数据区中,我们知道了虚拟机内存的概况,本文介绍虚拟机内存中的数据的其它细节,如对象如何创建.如何布局以及如何访问. 基于实用的原则,这里以HotSpot虚拟机和常用的内存区域Java堆 ...
- semantic-ui 图片
1.基础样式 方式一:因为图片是使用img标签,所以直接将class加载img标签中即可.不过要注意的是,class中要指定是ui image. 方式二:使用一个span或者div将img标签包裹,然 ...
- JavaScript对象访问器属性
对象访问器就是setter和getter,他们的作用就是 提供另外一种方法来获取或者设置对象的属性值, 并且在获取和设置的时候,可以用一定的其他操作. 看下面代码: <script> va ...
- linux 服务器名 访问 shh免密码登录
以根用户登录,或者登录后切换到根用户,然后在提示符下输入hostname命令,可以看出当前系统的主机名为localhost.localdomain. 更改/etc/sysconfig下的netwo ...
- Linux 下面 PG 的 uuid-ossp 包安装办法
1. pgsql 安装 时报错, 如图示: 详细信息为: 执行SQL为: CREATE EXTENSION IF NOT EXISTS "uuid-ossp" 错误纤细信息为: C ...