题面

给定一个长度为 $N$ 的整数序列:$A_1, A_2, \ldots, A_n$。

您可以执行以下操作 $0 \sim K$ 次:

选择两个整数 $i$ 和 $j$,满足 $i \ne j$ 并且 $1 \le i, j \le N$。令 $A_i$ 加上 $1$,令 $A_j$ 减去 $1$,可能产生负的元素。

计算在执行完操作后,整除 $A$ 中每个元素的最大可能正整数。这里正整数 $x$ 整除整数 $y$ 当且仅当存在一个整数 $z$,使得 $y=xz$。

思路

容易发现\(n\)很小,且答案\(ans\)一定为序列的权值和的因子,又发现,无论经过多少次操作后,总和均不变。考虑枚举\(ans\),记录下每一个值在当前情况下的余数,排序后用双指针找需要把所以余数都归零的操作次数,是否大于k判合法性即可

code

点击查看代码
#include <bits/stdc++.h>
using namespace std;
int read() {
int a=0,f=0;
char c=getchar();
for(; c<'0'||c>'9'; c=getchar())if(c=='-')f=1;
for(; c>='0'&&c<='9'; c=getchar())a=a*10+c-'0';
return f?-a:a;
}
const int N=5e2+10;
int n,sum=0,ans=0,k,kk;
int p[N],b[N];
int main() {
n=read(),k=read(),kk=k;
for(int i=1; i<=n; ++i) p[i]=read(),sum+=p[i];
// cout<<sum<<endl;
for(int i=1; i<=sum; ++i) {
// cout<<"sy "<<i<<" "<<sum<<" "<<sum%i<<endl;
if(sum%i!=0) continue;
int x=sum/i;
// cout<<"i: "<<i<<endl;
k=kk;
for(int j=1; j<=n; ++j) {
b[j]=p[j]%i;
}
sort(b+1,b+1+n);
bool flag=0;
int kun=0,l=1,r=n;
// cout<<"b: ";
// for(int d=1; d<=n; ++d) {
// cout<<b[d]<<" ";
// }
// cout<<endl;
while(l<=r) {
// cout<<"b: ";
// for(int d=1; d<=n; ++d) {
// cout<<b[d]<<" ";
// }
// cout<<endl;
int fl=b[l],fr=b[r],gl=fl,gr=i-fr;
// cout<<i<<" "<<l<<" "<<r<<" "<<gl<<" "<<gr<<" "<<k<<" "<<sum<<endl;
if(b[l]==0) {
l++;
continue;
}
if(fl+fr==i) {
k-=fl;
if(k<0) {
flag=1;
break;
}
l++,r--;
continue;
}
if(gl>gr) {
k-=gr;
b[l]-=gr;
r--;
if(k<0) {
flag=1;
break;
}
continue;
}
if(gl<gr) {
k-=gl;
b[r]+=gl;
l++;
if(k<0) {
flag=1;
break;
}
continue;
}
}
// cout<<"i: "<<flag<<endl;
if(!flag) {
ans=max(ans,i);
}
}
cout<<ans;
return 0;
}
/*
8 7
1 7 5 6 8 2 6 5
*/

ABC136 E - Max GCD 题解的更多相关文章

  1. HDU5726:GCD——题解

    题目:hdu的5726 (我原博客的东西,正好整理过来,属于st表裸题) (可以看出我当时有多么的菜--) 这道题写了一遍,然而蒟蒻的我的时间爆炸了-- 于是看了一下学长的代码(顺便在此处%一下学长) ...

  2. 洛谷 P2568 GCD 题解

    原题链接 庆祝一下:数论紫题达成成就! 第一道数论紫题.写个题解庆祝一下吧. 简要题意:求 \[\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)==p] \] 其中 \(p\) ...

  3. Hdoj 1003.Max Sum 题解

    Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...

  4. BZOJ2820:YY的GCD——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2820 Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...

  5. CC DGCD:Dynamic GCD——题解

    https://vjudge.net/problem/CodeChef-DGCD https://www.codechef.com/problems/DGCD 题目大意: 给一颗带点权的树,两个操作: ...

  6. CH 4302 Interval GCD 题解

    题意 给定一个长度为N的数列A,以及M条指令 (N≤5* 10^5, M<=10^5),每条指令可能是以下两种之一: "C l r d",表示把 A[l],A[l+1],-, ...

  7. gcd 题解

    gcd Little White learned the greatest common divisor, so she plan to solve a problem: given \(x, n,\ ...

  8. ABC136E Max GCD

    Thinking about different ways of thinking. --- LzyRapx 题目 思路比较容易想到. Observations: 每次操作过后和不变. 枚举和的因子 ...

  9. [洛谷2257]YY的GCD 题解

    整理题目转化为数学语言 题目要我们求: \[\sum_{i=1}^n\sum_{i=1}^m[gcd(i,j)=p]\] 其中 \[p\in\text{质数集合}\] 这样表示显然不是很好,所以我们需 ...

  10. luoguP3128 [USACO15DEC]最大流Max Flow 题解(树上差分)

    链接一下题目:luoguP3128 [USACO15DEC]最大流Max Flow(树上差分板子题) 如果没有学过树上差分,抠这里(其实很简单的,真的):树上差分总结 学了树上差分,这道题就极其显然了 ...

随机推荐

  1. AttributeError: module 'requests' has no attribute 'get' 报错分析

    这个报错与代码时没有关系 当文件名与调用模块名重合时,系统找不到我们调用的requests模块. 在命名时,我们要注意不要重合.

  2. autodesk2023全家桶 Autodesk 2023 所有产品下载地址

    autodesk2023全家桶 Autodesk 2023 所有产品下载地址 作者: 佚名 2022/4/10 11:51:24 Autodesk系列软件每年都会提前发布,目前autodesk2023 ...

  3. k8s之service服务

    service服务介绍 在k8s中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问 为了解决这个问 ...

  4. CF单机版终极猎手30人版安装教程

    本游戏是CF的单机版本,内含终极猎手30人版,可变身四种终极猎手.这个版本只有这一种模式,没有其他的幽灵模式.生化模式.爆破模式.团队模式等等,如果想玩上述的模式,你可以在其他地方找.值得注意的是这个 ...

  5. PV动态供给之nfs

    需求描述:利用nfs实现PV动态供给 前提:部署好nfs服务器  这里地址是 192.168.1.35  path: /ifs/k8s NFS:是一个主流的文件共享服务器. # yum install ...

  6. Wifi Display

    wifi display常用术语 AP:wifi access point Primary Sink: a device that supports rendering video content o ...

  7. Jenkins添加代理节点

    新建linux节点 新建节点 配置远程工作目录和登录方式SSH 如果没有密码需要手动添加(需要在对应的slave节点存在的用户) 保存即可. 验证节点 新建任务 New Item 选择要运行的节点(这 ...

  8. Nginx日志切割工具logrorate

    1.logrotate系统工具 linux自带logrotate工具 主流的linux系统版本,都默认安装logrotate包,作为分割日志的系统工具,可以方便将日志按周期(日,周,月)和大小进行分割 ...

  9. CTreeCtrl的用法汇总(转)

    一 基础操作  1 插入节点 1)插入根节点 //插入根节点 HTREEITEM hRoot; CString str=L"ROOT" hRoot=nTreeCtrl.Insert ...

  10. 针对Vmware打开BIOS中VT虚拟化相关后仍然报错

    安装虚拟机时报错问题现象:  通过VMware虚拟机安装Centos时提示弹出提示框,"已将该虚拟机配置为使用64位客户机操作系统,但是,无法执行64位操作."具体提示如下图所示: ...