Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 500 points

Problem Statement

We have a sequence of N integers: A1,A2,⋯,AN.

You can perform the following operation between 0 and K times (inclusive):

  • Choose two integers i and j such that i≠j, each between 1 and N (inclusive). Add 1 to Ai and −1 to Aj, possibly producing a negative element.

Compute the maximum possible positive integer that divides every element of A after the operations. Here a positive integer x divides an integer y if and only if there exists an integer z such that y=xz.

题意很简单: 对于给你的N的整数A1~AN 可以进行0~k次操作,从1~N中任取俩数,Ai和Aj(i!=j),Ai + 1 且 Aj - 1 , 最后使A1~AN的公因数最大

Constraints

  • 2≤N≤500
  • 1≤Ai≤10^6
  • 0≤K≤10^9
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K
A1 A2 ⋯⋯ AN−1 AN

Output

Print the maximum possible positive integer that divides every element of A after the operations.


Sample Input 1

2 3
8 20

Sample Output 1

7

77 will divide every element of AA if, for example, we perform the following operation:

  • Choose i=2,j=1. A becomes (7,21)(7,21).

We cannot reach the situation where 8 or greater integer divides every element of A.


Sample Input 2

2 10
3 5

Sample Output 2

8

Consider performing the following five operations:

  • Choose i=2,j=1. A becomes (2,6)(2,6).
  • Choose i=2,j=1. A becomes (1,7)(1,7).
  • Choose i=2,j=1. A becomes (0,8)(0,8).
  • Choose i=2,j=1. A becomes (−1,9)(−1,9).
  • Choose i=1,j=2. A becomes (0,8)(0,8).

Then, 0=8×0 and 8=8×1, so 88 divides every element of A. We cannot reach the situation where 9 or greater integer divides every element of A.


Sample Input 3

4 5
10 1 2 22

Sample Output 3

7

Sample Input 4

8 7
1 7 5 6 8 2 6 5

Sample Output 4

5

思路:

既然是A1~AN的所有数的因数,那么也是它们和sum的因数,所以枚举sum的所有因数,测试因数g,算出A1~AN对g的余数,并进行从小到大的排序,左边的数(即余数小的数)先减成g的倍数,右边的数(即余数大的数)对应加上减去的数,补成g的倍数

至于说为什么这样一定成功,我还没想明白

接下来是某个大佬的代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=500+9;
int n;
int a[maxn],lmt,b[maxn];bool check(int g){for(int i=1;i<=n;++i)b[i]=a[i]%g;sort(b+1,b+n+1);int tot=lmt,cost=0;int t=n;for(int i=1;i<=t;++i){tot-=b[i];if(tot<0)return false;cost+=b[i];//b[i]=0;while(cost>0){int d=g-b[t];//此时d就是b[t]距离g的倍数最近的距离,好好想下就明白了 if(d<=cost){//b[t]=0;cost-=d;--t;}else{b[t]+=cost;cost=0;}}}return true;
}int solve(){int sum=0;for(int i=1;i<=n;++i)sum+=a[i];int qt=sqrt(sum);vector <int> d;// divisorfor(int i=1;i<=qt;++i)if(sum%i==0){d.push_back(i);if(check(sum/i))return sum/i;}int tot=d.size();for(int i=tot-1;i>=0;--i){if(check(d[i]))return d[i];}
}void init(){cin>>n>>lmt;for(int i=1;i<=n;++i)cin>>a[i];
}
int main(){init();cout<<solve()<<"\n";return 0;
}

AtCoder Beginner Contest 136 E - Max GCD相关推荐

  1. AtCoder Beginner Contest 215 F - Dist Max 2

    AtCoder Beginner Contest 215 F - Dist Max 2 平面上有一系列的点(xi,yi)(x_i,y_i)(xi​,yi​),定义两点(xi,yi),(xj,yj)(x ...

  2. AtCoder Beginner Contest 178 E.Dist Max

    AtCoder Beginner Contest 178 E.Dist Max 题目链接 如果我们知道一个 nnn 维的点,对每一个维度都有一个运算符的话,很明显一共有 2n2^n2n 种运算,而曼哈 ...

  3. Caddi Programming Contest 2021(AtCoder Beginner Contest 193) 题解

    Caddi Programming Contest 2021(AtCoder Beginner Contest 193) A - Discount 打折浮点数除即可 B - Play Snuke 枚举 ...

  4. Mynavi Programming Contest 2021(AtCoder Beginner Contest 201)题解

    文章目录 A - Tiny Arithmetic Sequence B - Do you know the second highest mountain? C - Secret Number D - ...

  5. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)题解

    文章目录 A - Century B - 200th ABC-200 C - Ringo's Favorite Numbers 2 D - Happy Birthday! 2 E - Patisser ...

  6. AtCoder Beginner Contest 081

    AtCoder Beginner Contest 081 题目链接:https://abc081.contest.atcoder.jp/ 总结:四道题较为简单,比赛时切完三题rank41,然后D题读错 ...

  7. AtCoder Beginner Contest 208

    文章目录 AtCoder Beginner Contest 208 A - Rolling Dice B - Factorial Yen Coin C - Fair Candy Distributio ...

  8. AtCoder题解 —— AtCoder Beginner Contest 182 —— D - Wandering

    题目相关 题目链接 AtCoder Beginner Contest 182 D 题,https://atcoder.jp/contests/abc182/tasks/abc182_d. Proble ...

  9. AtCoder Beginner Contest 175 E.Picking Goods

    AtCoder Beginner Contest 175 E.Picking Goods 题目链接 典型的 DP,如果不加限制条件的话就是从上到下找一条最长路,但是限制了每行只能选 3 个,所以就多加 ...

最新文章

  1. Spark2 ML 学习札记
  2. 想进入系统CMD?请输入密码
  3. string截取某个字符串之前的_python String字符串操作
  4. COBBLER无人值守安装-----已用真实服务器测试
  5. 《防患未然:实施情报先导的信息安全方法与实践》——2.8 小结
  6. java自动推断类型_Java 7的类型推断
  7. jwt重放攻击_JWT+ASP.NET MVC 时间戳防止重放攻击
  8. C#获得SQLServer服务器名、数据库名、表名、以及字段名
  9. JSP-页面实现自动跳转!
  10. (6)matplot去掉坐标轴
  11. linux 软件包安装管理
  12. 给大家分享10个值得关注的C语言开源项目
  13. RQNOJ 34 紧急援救 解题报告
  14. 为什么电梯安装企业项目接得更多,利润更少?
  15. 多元相关与回归分析及R使用
  16. c语言使用反三角函数,C语言中反三角函数怎样调用?
  17. ARM base instruction -- orr
  18. 抽象数据类型的三元组C语言,试仿照三元组的抽象数据类型分别写出数据类型复数和有理数的定义?...
  19. c语言实数加法程序,蓝桥杯 算法提高 实数相加(c语言版附注释)
  20. 禁止Ubuntu快捷键(二)

热门文章

  1. “住过一晚两万的ICU后,我还是建议你不要轻易买保险”
  2. 登陆动网论坛时报“Microsoft JET Database Engine 错误 '80004005' ”
  3. Virtual Private Network虚拟专用网
  4. 【实用教程】Xshell6远程连接阿里云轻量应用服务器
  5. 取消高速省界收费站驶入“快车道”,我们距智能交通还有多远?
  6. matlab工具箱三维还原原理,matlab三维重建工具箱
  7. 1.1 编辑楼层标高
  8. 常用输入信号及其拉氏变换
  9. mysql相关的dll_libmySQL.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  10. ​小城故事—逃离之路