Gym 101470A Banks【暴力】

来源:互联网 发布:作品集 知乎 编辑:程序博客网 时间:2024/06/06 14:13



题目大意:


给出长度为N的一个序列,我们每一次操作可以使得一个数变成其相反数,然后使得两边的两个数减去合格数的绝对值。

问最少多少步使得整个序列所有元素都是大于等于0的。


思路:


说粗来可能不信,但是这个题确实暴力模拟就能过。

玄学复杂度。


Ac代码:

#include<stdio.h>#include<string.h>using namespace std;int a[150000];int main(){    freopen("A.in","r",stdin);    int n;    while(~scanf("%d",&n))    {        int output=0;        for(int i=1;i<=n;i++)scanf("%d",&a[i]);        while(1)        {            int flag=0;            for(int i=1;i<=n;i++)            {                if(a[i]<0)                {                    a[i]=-a[i];                    output++;                    flag=1;                    if(i==1)                    {                        a[n]-=a[i];                        a[2]-=a[i];                    }                    else if(i==n)                    {                        a[1]-=a[i];                        a[n-1]-=a[i];                    }                    else a[i-1]-=a[i],a[i+1]-=a[i];                }            }            if(flag==0)break;        }        printf("%d\n",output);    }}