首页 > 其他 > 详细

P1495 曹冲养猪

时间:2019-04-01 21:27:20      阅读:125      评论:0      收藏:0      [点我收藏+]

题目描述

自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把。举个例子,假如有16头母猪,如果建了3个猪圈,剩下1头猪就没有地方安家了。如果建造了5个猪圈,但是仍然有1头猪没有地方去,然后如果建造了7个猪圈,还有2头没有地方去。你作为曹总的私人秘书理所当然要将准确的猪数报给曹总,你该怎么办?

输入输出格式

输入格式:

第一行包含一个整数n (n <= 10) – 建立猪圈的次数,解下来n行,每行两个整数ai, bi( bi <= ai <= 1000), 表示建立了ai个猪圈,有bi头猪没有去处。你可以假定ai,aj互质.

输出格式: 输出包含一个正整数,即为曹冲至少养母猪的数目。

首先看到这道题的时候,第一眼就看到了假定ai,aj互质,然后就很容易想到中国剩余定理(想到了也不会写QAQ

就是一道裸的中国剩余定理的板子题

代码如下:

技术分享图片
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cmath>
 5 typedef long long ll;
 6 using namespace std;
 7 ll n, a[11], b[11], ans = 0, cnt = 1;//数组开15会runtime error(在其他评测机上试的就这样QAQ)
 8 void exgcd(ll a, ll b, ll &x, ll &y) {
 9     if(b == 0) {
10         x = 1;
11         y = 0;
12     } else {
13         exgcd(b,a%b,x,y);
14         ll temp = x;
15         x = y;
16         y = temp - a / b * y;
17     }
18 }
19 void china() {
20     ll p, q, x, y;
21     for(ll i = 1; i <= n; i++) {
22         p = cnt / a[i];
23         exgcd(p,a[i],x,y);
24         ans = ((ans + p * x * b[i]) % cnt + cnt) % cnt;
25     }
26 }
27 int main() {
28     scanf("%lld", &n);
29     for(ll i = 1; i <= n; i++) {
30         scanf("%lld %lld", &a[i], &b[i]);
31         cnt *= a[i];
32     }
33     china();
34     printf("%lld\n", ans);
35     return 0;
36 }
View Code

 

P1495 曹冲养猪

原文:https://www.cnblogs.com/jiqimin/p/10638980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!