您的位置:首页 > 其它

【CodeForces】[610B]Vika and Squares

2016-04-07 13:17 218 查看


思路是首先有至少

最小的那一种*n次(注意数据范围)

然后剩下的以最小的那个为分割

可以分成几部分

取其中最大的那一部分的个数加入结果

(最前面的和最后面的可以视为同一组)

#include<stdio.h>
int a[200200];
int main() {
int n;
while(scanf("%d",&n)!=EOF) {
scanf("%d",&a[0]);
int min=a[0];
for(int i=1; i<n; i++) {
scanf("%d",&a[i]);
if(min>a[i])
min=a[i];
}
__int64 res=(__int64)min*(__int64)n;
int t=0;
int tres=0;
int maxtres=0;
int firt=0;
bool flag=false;
for(int i=0; i<n; i++) {
a[i]-=min;
if(a[i]!=0) {
if(flag) {
tres++;
} else {
firt++;
}
} else {
flag=true;
if(maxtres<tres)
maxtres=tres;
tres=0;
}
}
tres+=firt;
if(maxtres<tres)
maxtres=tres;
printf("%I64d\n",res+(__int64)maxtres);
}
return 0;
}


题目地址:【CodeForces】[610B]Vika and Squares
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces