BNU Eugeny and Array

来源:互联网 发布:同学聚会相册制作软件 编辑:程序博客网 时间:2024/06/15 05:13

http://www.bnuoj.com/bnuoj/problem_show.php?pid=29452


题意:给你一个只有1和-1组成的数组,然后给你一个范围,求重新排列后在这个范围内求和能否为0,能为0则输出为1,否则为0

这个题只要计算一下范围是否为偶数,偶数个数相加才可能为0,然后统计一下1和-1的个数,看里面最少的个数是否大于等于范围的一半。

AC代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int main(){    int n,m,i,j,t,l,r,p;    int a[200010];    int b[2];    while(scanf("%d%d",&n,&m)!=EOF)    {        memset(b,0,sizeof(b));        for(i = 1; i <= n; i++)        {            scanf("%d",&a[i]);            if(a[i] == 1)            {                b[1]++;            }            else            {                b[0]++;            }        }        t = m;        while(t--)        {            scanf("%d%d",&l,&r);            p = r-l+1;            if(p%2 == 0)            {                if(p/2 <= b[1] && p/2 <= b[0])                {                    printf("1\n");                }                else                {                    printf("0\n");                }            }            else            {                printf("0\n");            }        }    }    return 0;}


原创粉丝点击