• 韩信点兵


    P1272 - 韩信点兵

    Description

    韩信是中国军事思想“谋战”派代表人物,被后人奉为 “兵仙”、“战神”。“王侯将相”韩信一人全任。“国士无双”、“功高无二,略不世出”是楚汉之时人们对其的评价。作为统帅,他率军出陈仓、定三秦、擒 魏、破代、灭赵、降燕、伐齐,直至垓下全歼楚军,无一败绩,天下莫敢与之相争。
    相传,韩信带兵打仗时,从不直接清点军队人数。有一次,韩信带1500名兵士打仗,战死四五百人。站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信马上说出人数:1049。
    这次,刘邦派韩信带兵N人攻打一座重兵驻扎的城市。城市占领了,可汉军也是伤亡惨重。韩信需要知道汉军至少损失了多少兵力,好向刘邦汇报。
    已知韩信发出了M次命令,对于第i次命令,他选择一个素数Pi,要求士兵每Pi人站一排,此时最后一排剩下了ai人。你的任务是帮助韩信求出这种情况下汉军损失兵力的最小值。当然,由于士兵们都很疲惫,他们有可能站错队伍导致韩信得到的数据有误。

    Input

    第一行两个正整数N,M,分别代表最初的军队人数和韩信的询问次数。
    接下来有M行,每行两个非负整数Pi,ai,代表韩信选择的素数和此时剩下的人数。
    输入保证每个素数各不相同。

    Output

    输出一行,一个整数。
    若有解,输出最小损失人数。若无解,输出-1.

    Sample Input

    1500 3
    3 2
    5 4
    7 6

    Sample Output

    31

    Hint

    对于30%的数据,1≤N≤1,000,000,1≤M≤4;
    对于50%的数据,1≤N≤100,000,000,1≤M≤8;
    对于100%的数据,1≤N≤1,000,000,000,000,1≤M≤10;保证所有素数的乘积≤1012, 0≤ai≤Pi.

    这里数据保证模数都是互质的,所以就可以直接用中国剩余定理。
    这里要求的不是最小解,要求一定范围内的最大解,只要求出最小解后一直加lcm
    就可以了。

     1 #include<set>
     2 #include<map>
     3 #include<queue>
     4 #include<stack>
     5 #include<ctime>
     6 #include<cmath>
     7 #include<string>
     8 #include<vector>
     9 #include<cstdio>
    10 #include<cstdlib>
    11 #include<cstring>
    12 #include<iostream>
    13 #include<algorithm>
    14 #define LL long long
    15 using namespace std;
    16 LL a[11],b[11];
    17 void exgcd(LL a,LL b,LL &x,LL &y){
    18   if(!b) x=1,y=0;
    19   else exgcd(b,a%b,y,x),y-=x*(a/b);
    20 }
    21 int main()
    22 {
    23   freopen("!.in","r",stdin);
    24   freopen("!.out","w",stdout);
    25   LL n,m,sum=1,ans=0;
    26   scanf("%lld%lld",&n,&m);
    27   for(int i=1;i<=m;i++) scanf("%lld%lld",&a[i],&b[i]),sum*=a[i];
    28   for(int i=1;i<=m;i++){
    29     LL M=sum/a[i],x,y;
    30     if(__gcd(a[i],M)!=1) printf("-1"),exit(0);
    31     exgcd(a[i],M,x,y);
    32     if(y<0)y+=a[i];
    33     ans+=y*M*b[i];
    34     ans%=sum;
    35   }
    36   while(ans+sum<n) ans+=sum;
    37   if(ans>n) printf("-1");
    38   else printf("%lld",n-ans);
    39   return 0;
    40 }
  • 相关阅读:
    交叉熵损失函数
    均方根误差(RMSE),平均绝对误差(MAE),标准差(Standard Deviation)
    【转载】【矩阵,数组,列表之间相互转化】
    【数据集介绍】【Point04】
    【视频处理知识】
    【IOU】
    【模型训练】
    【图片操作】
    python 写 XML 文件
    【数组操作】 创建、排序
  • 原文地址:https://www.cnblogs.com/pantakill/p/6639970.html
Copyright © 2020-2023  润新知