jzoj4922 环 [性质、枚举答案、转换模型]
来源:互联网 发布:上虞菜鸟网络招聘 编辑:程序博客网 时间:2024/04/29 20:14
小A有一个环,环上有n个正整数。他有特殊的能力,能将环切成k段,每段包含一个或者多个数字。对于一个切分方案,小A将以如下方式计算优美程度:
首先对于每一段,求出他们的数字和。然后对于每段的和,求出他们的最大公约数,即为优美程度。
他想通过合理地使用他的特殊能力,使得切分方案的优美程度最大。
设一种分割方案为
那么显然d是sum的一个约数,而sum大概为
那么我们
如果不考虑环的话,显然是在前缀和%x相同的地方都可以切割,这样我们hash一下,就可以求max了。
再考虑环,发现假如中间一段能被x整除,那么剩下的也必定能被x整除。
即
那么问题就和不考虑环接近了,只需要求出中间有多少个可以切出来的区间,然后再加上头尾的一个就可以了(其实就是可以切的位置个数)
然后这个问题就被解决了,约数个数其实达不到
CODE
#include <cstdio>#include <iostream>#include <cstring>#define maxn 2010#define mo 7019#define max(a,b) ((a)>(b)?(a):(b))using namespace std;typedef long long ll;ll a[maxn],sum[maxn],n;ll ans[maxn],h[mo],f[mo];ll hash(ll x) { ll y=x; x%=mo; while (h[x]!=0 && h[x]!=y) { x++; if (x>=mo) x=0; } h[x]=y; return x;}void solve(ll x) { memset(h,0,sizeof h); memset(f,0,sizeof f); ll b=0,tk; for (ll i=1; i<=n; i++) { tk=(++f[hash(sum[i]%x+1)]); b=max(b,tk); } ans[b]=max(x,ans[b]);}int main() { cin>>n; for (ll i=1; i<=n; i++) scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i]; ll tk; for (ll i=1; i*i<=sum[n]; i++) { if (sum[n]%i==0) { tk=sum[n]/i; if (tk!=i) solve(tk); solve(i); } } ll ma=0; for (ll i=n; i>=1; i--) ma=max(ans[i],ma),ans[i]=ma; for (ll i=1; i<=n; i++) printf("%lld\n",ans[i]);}
0 0
- jzoj4922 环 [性质、枚举答案、转换模型]
- 【jzoj4922】【环】
- 【JZOJ4922】环
- [JZOJ4922] 环
- Jzoj4922 环
- 【JZOJ4922】【NOIP2017提高组模拟12.17】环
- JZOJ4829. 【GDOI2017模拟10.30】独木桥 根据性质转化模型后二分答案
- 模型的性质与目标
- 枚举 转换
- 枚举转换
- 转换枚举
- 2017.11.7机房小测-K进制分解应用/模型转换-矩形并/题目性质-IOI2015原题简化
- Live Archive2678 二分枚举答案
- poj 3658 二分枚举答案。
- [UOJ245]天路 枚举答案判断
- 一类隐马尔可夫模型的若干极限性质
- 金额转换-答案
- 取模性质&进制转换
- Ubuntu安装sublime-text3详细教程
- 怎么在windows下使用gvim
- Centos7安装mongodb出现的问题:服务无法启动
- 统一监控报警平台的架构设计思路分享
- 配置hadoop HIVE元数据保存在mysql中
- jzoj4922 环 [性质、枚举答案、转换模型]
- 转载——JAVA内存模型
- 位域
- Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神
- V8 引擎使用心得
- 4-进一步结合ui文件编写helloworld
- java.sql.Timestamp类的使用
- 1074. Reversing Linked List (25)
- 培训班程序猿找工作注意事项