博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cogs——1786. 韩信点兵
阅读量:6041 次
发布时间:2019-06-20

本文共 1991 字,大约阅读时间需要 6 分钟。

          1786. 韩信点兵

            ★★★   输入文件:HanXin.in   输出文件:HanXin.out   简单对比

                  时间限制:1 s   内存限制:256 MB

【题目描述】

    韩信是中国军事思想“谋战”派代表人物,被后人奉为“兵仙”、“战神”。“王侯将相”韩信一人全任。“国士无双”、“功高无二,略不世出”是楚汉之时人们对其的评价。作为统帅,他率军出陈仓、定三秦、擒魏、破代、灭赵、降燕、伐齐,直至垓下全歼楚军,无一败绩,天下莫敢与之相争。

    相传,韩信带兵打仗时,从不直接清点军队人数。有一次,韩信带1500名兵士打仗,战死四五百人。站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信马上说出人数:1049。

    这次,刘邦派韩信带兵N人攻打一座重兵驻扎的城市。城市占领了,可汉军也是伤亡惨重。韩信需要知道汉军至少损失了多少兵力,好向刘邦汇报。

    已知韩信发出了M次命令,对于第i次命令,他选择一个素数Pi,要求士兵每Pi人站一排,此时最后一排剩下了ai人。你的任务是帮助韩信求出这种情况下汉军损失兵力的最小值。当然,由于士兵们都很疲惫,他们有可能站错队伍导致韩信得到的数据有误。

【输入格式】

 

第一行两个正整数N,M,分别代表最初的军队人数和韩信的询问次数。

接下来有M行,每行两个非负整数Piai,代表韩信选择的素数和此时剩下的人数。

输入保证每个素数各不相同。

 

【输出格式】

 

输出一行,一个整数。

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

 

【样例输入】

1500 33 25 47 6

【样例输出】

31

【数据范围】

30%,1N1,000,000,1M4;

50%1N100,000,000,1M8;

100%1N1,000,000,000,000,1M10;1012,0ai<Pi.

 

代码:

 

#include
#include
#include
#include
#include
#define N 20using namespace std;long long n,s,a[N],m[N],tot,ans,M=1;long long read(){ long long x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1; ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} return x*f;}long long exgcd(long long a,long long b,long long &x,long long &y){ if(b==0) { x=1,y=0; return a; } long long r=exgcd(b,a%b,x,y),tmp; tmp=x,x=y,y=tmp-a/b*y; return r;}long long crt(){ long long mi=0,sum=0; for(int i=1;i<=n;i++) { long long x,y; mi=M/m[i]; exgcd(mi,m[i],x,y); sum=(sum%M+a[i]%M*mi%M*x%M)%M; } if(sum<0) sum+=M; return sum;}int main(){ freopen("HanXin.in","r",stdin); freopen("HanXin.out","w",stdout); s=read(),n=read(); for(int i=1;i<=n;i++) m[i]=read(),a[i]=read(),M*=m[i]; tot=crt(); while(tot+M<=s) tot+=M; ans=s-tot; if(tot>s) printf("-1"); else printf("%lld",ans);}

 

转载于:https://www.cnblogs.com/z360/p/7341651.html

你可能感兴趣的文章
浅尝异步IO
查看>>
C - Train Problem II——(HDU 1023 Catalan 数)
查看>>
Speak loudly
查看>>
iOS-在项目中引入RSA算法
查看>>
[译] 听说你想学 React.js ?
查看>>
gulp压缩合并js与css
查看>>
块级、内联、内联块级
查看>>
Predicate
查看>>
[面试题记录01]实现一个function sum达到一下目的
查看>>
这个季节的忧伤,点到为止
查看>>
mysql通过配置文件进行优化
查看>>
省级网站群建设关注点
查看>>
工作第四天之采集资源
查看>>
innobackupex 在增量的基础上增量备份
查看>>
Windows Server 2012 R2 DirectAccess功能测试(2)App1服务器安装及配置
查看>>
基于清单的启动器的实现
查看>>
外网用户通过citrix打印慢的解决方法
查看>>
STL容器的使用
查看>>
关于std::map
查看>>
JXL导出Excel文件兼容性问题
查看>>