BZOJ 1441
2016-07-26 16:03
225 查看
1441: Min
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 467 Solved: 312
[Submit][Status][Discuss]
Description
给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小Input
第一行给出数字N,代表有N个数 下面一行给出N个数Output
S的最小值Sample Input
24059 -1782
Sample Output
99HINT
Source
题解:先把问题简单化,取n=2 取s=x1*a1+x2*a2>0最小 这个方程和我们之前讲的线性不定方程形式相同。形如ax+by=c的方程有个特点,如果x,y有整数解的话,必须满足: gcd(a,b)|c 反过来,ax+by的正数最小值是gcd(a,b)
当推广到n>2的情况,上面的结论也是成立的。对于S=A1*X1+...An*Xn,它的正数最小值等于gcd(A1,A2,…,An) 证明方法和我们证明ax+by=c对该结论成立的方法类似。 最后我们只需要求一下A1…An的gcd即可。
AC代码:
#include<cstdio> #include<cstdlib> using namespace std; int n,a[1000010]; int gcd(int a,int b){ return !b?a:gcd(b,a%b); } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=2;i<=n;i++) a[i]=gcd(a[i],a[i-1]); printf("%d\n",abs(a )); return 0; }
相关文章推荐
- [转载] FFMPEG之AVRational TimeBase成员理解
- 禁用访客账户登录
- GSON处理时间的问题
- android 适配性完全攻略
- 左右布局,左侧固定右侧自适应,全屏
- struts2--拦截器
- Twemproxy安装配置
- mysql压缩包的实际安装记录
- Java数组使用-提高篇
- GDB十分钟教程
- UltraEdit (UEStudio)使用技巧
- EasyUI数据表格之二
- php环境变量:$ENV
- Taglib的打包部署和使用方式详解(转载)
- EasyUI数据表格之二
- EasyUI数据表格之二
- 网卡流量统计工具
- AeroSpike 记录
- IO流之Print流
- 图像特征概念、什么是图像特征