题意解释来自卿神…….我大概写点自己的收获
题目链接:http://codeforces.com/contest/610/problem/B
你有n种颜色,然后每种颜色有ai个,你需要依次涂色。
比如第一个你涂x,那么下一个就得涂x+1,然后x+2…..
问你最多能涂多少个格子。
#include<bits/stdc++.h>
using namespace std;
int Min=1e9+5,ans=0;
int a[200010];
vector<int>P;
int main(){
int n;
scanf("%d",&n);
for (int i = 1; i <=n; ++i)
{
scanf("%d",&a[i]);
}
for (int i = 1; i <=n; ++i)
{
Min=min(Min,a[i]);
}
int first=0;
for (int i = 1; i <=n; ++i)
{
if (a[i]==Min)
{
P.push_back(i);
}
}
P.push_back(P[0]+n);
long long tmp=0;
for (int i = 1; i < P.size(); ++i)
{
tmp=max(tmp,1LL*P[i]-1LL*P[i-1]-1);
}
printf("%I64d\n",1LL*n*Min+1LL*tmp);
return 0;
}
①#include<bits/stdc++.h>包含C++的所有头文件,但是只有cf和tc上才适用,大部分的国能oj上不承认使用这个头文件。
②用eps找到min最小数,依次比较,小数记录min。
③该题是找到首位都是最小数的区间段,其中区间段内不能包含最小数......这里傻逼了...
④P.push_back(P[0]+n),把这个数放到vector的最后,这样就可以循环地比较最后一个数与第一个数的循环距离。(感觉是该看看vector了,好多都忘了)
⑤1LL转换,把int型转换为long long型
⑥for(i=1;i<=n;i++)