先找出最小的数,然后找所有最小数的距离,取一个最大距离,然后根据代码上的公式解就好了。
代码如下:
#include <cstdio>
__int64 a[200022]; //一怒之下全换成longlong,居然过了
__int64 b[200022];
int main()
{
__int64 n;
__int64 m;
__int64 min;
__int64 ans;
while (~scanf ("%I64d",&n))
{
min = 1e9+1;
for (__int64 i = 1 ; i <= n ; i++)
{
scanf ("%I64d",&a[i]);
if (a[i] < min)
min = a[i];
}
m = 1;
for (__int64 i = 1 ; i <= n ; i++)
{
if (a[i] == min)
b[m++] = i;
}
m--;
if (m == 1)
{
ans = n * (min + 1) -1;
printf ("%I64d\n",ans);
}
else
{
__int64 dis = b[1] + n - b[m];
for (__int64 i = 2 ; i <= m ; i++)
{
if (dis < b[i] - b[i-1]) //什么时候脑子抽抽在这打了个分号 = = ,每次比赛都要出现这样的意外,唉
dis = b[i] - b[i-1];
}
ans = n * min + dis - 1;
printf ("%I64d\n",ans);
}
}
return 0;
}