【JZOJ4678】钱仓
来源:互联网 发布:linux内存管理详解 编辑:程序博客网 时间:2024/04/29 16:43
Description
Solution
看似很复杂,实际上我们只要贪心的想,每一个有钱的位置肯定沿顺时针铺下去是最优的。所以我们只要找到合法的起点就可以了。
何为合法?
我们把原序列加倍,从一个起点开始往后取n个数,如果按照上面规则能刚好铺完(由于已经破环,所以不能绕圈铺),那么这就是合法的。
然而合法的起点有许多,取最小值会超时。
我们发现,对于每个合法序列,它们中的钱的mol数都是一样的,所以只是铺的顺序不同,那么贡献也是一样的。
Code
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)#define N 100001#define ll long longusing namespace std;int c[N*2];int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); int n; cin>>n; fo(i,1,n) scanf("%d\n",&c[i]),c[i+n]=c[i]; ll ans=0; int st,mx=0,qz=0,q=1; fo(i,1,n*2-1) { if(qz<0) qz=0,q=i; qz+=c[i]-1; if(qz>mx) mx=qz,st=q; } int p=st-1; fo(i,st,st+n-1) if(c[i]) { fo(j,1,c[i]) p++,ans+=(p-i)*(p-i); } cout<<ans;}
1 0
- 【JZOJ4678】钱仓
- 【jzoj4678】【钱仓】【平衡树】【avl】【队列】
- JZOJ4678. 【NOIP2016提高A组8.11】钱仓
- 【NOIP提高】钱仓
- 【JZOJ 4678】钱仓
- 【JZOJ 4678】钱仓
- 【NOIP2016提高A组8.11】钱仓
- NOIPの模拟2016_8_11_t1_钱仓
- 【NOIP2016提高A组8.11】钱仓
- 钱仓【NOIP2016提高A组8.11】
- 钱仓 最大字段和+贪心+模拟
- JZOJ.4678【NOIP2016提高A组8.11】 钱仓
- java 视频转码
- 密码学概要--JAVA
- Centos部署Nginx+php+mysql
- POJ 3693 Maximum repetition substring 后缀数组与区间最值的完美结合
- tinsanmr博客测试
- 【JZOJ4678】钱仓
- 关于线程锁的相关
- 【转】PLSQL Developer 首选项配置
- 更新SDK后项目报错
- 网口扫盲二:Mac与Phy组成原理的简单分析
- BZOJ4642 泡泡
- IOS-检测blobck中self
- HTTP协议顺带DNS,TCP/IP
- session信息入库