zoukankan      html  css  js  c++  java
  • vijos p1164——曹冲养猪(中国剩余定理)(复习)

    描述

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

    格式

    输入格式

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

    //你可以假定ai,aj互质.

    输出格式

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

    样例1

    样例输入1

    3
    3 1
    5 1
    7 2

    样例输出1

    16
     
     
    样例:除以3余1,除以5余1,除以7余2。考虑中国剩余定理。
    怎样才能满足一个条件,且不影响其它其他条件呢?
    先将a[i]连乘,在考虑第i个条件时,将连乘的值除掉当前值,这样增加一定是其他条件的倍数,不会影响条件。
    枚举j,求当除掉当前值后的值乘j,看是否余上当前a[i]为1。得到j后,直接乘上b[i]次就得出了余上a[i]为b[i]的值。ans开longlong累加。
    祝自己NOIP考试顺利~
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 long long b[11],m[11],Mi[11],M[11];
     6 int main()
     7 {
     8     int n;
     9     while(scanf("%d",&n)==1)
    10     {
    11         long long mm=1;
    12         for(int i=1;i<=n;i++)
    13         {
    14             scanf("%I64d%I64d",&m[i],&b[i]);
    15             mm*=m[i];
    16         }
    17         long long ans=0;
    18         for(int i=1;i<=n;i++)
    19         {
    20             M[i]=mm/m[i];
    21             for(long long j=1;j<100000;j++)
    22             if(j*M[i]%m[i]==1)
    23             {
    24                 Mi[i]=j;
    25                 break;
    26             }
    27             ans+=Mi[i]*M[i]*b[i];
    28         }
    29         printf("%I64d
    ",ans%mm);
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    PHP用户注册邮箱验证激活帐号
    利用openssl进行RSA加密解密
    RSA算法使用介绍
    JS七种加密解密方法
    JS调用PHP 和 PHP调用JS的方法举例
    php注册登录时生成的验证码
    Joomla!网站扫描工具joomscan
    Xamarin XAML语言教程控件模板的模板绑定
    Xamarin.Forms使用Slider注意问题
    ASP.net 资源请求漏洞利用工具PadBuster
  • 原文地址:https://www.cnblogs.com/937337156Zhang/p/6071521.html
Copyright © 2011-2022 走看看