【CodeForces】[610B]Vika and Squares

文章字数:225

问题描述

问题分析

思路是首先有至少
最小的那一种*n次(注意数据范围)
然后剩下的以最小的那个为分割
可以分成几部分
取其中最大的那一部分的个数加入结果
(最前面的和最后面的可以视为同一组)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#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

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...