zoukankan      html  css  js  c++  java
  • [Codeforces 1053B] Vasya and Good Sequences

    Link:

    Codeforces 1053B 传送门

    Solution:

    其实就是暴力

    观察需要满足的条件:

    1、个数和为偶数

    2、最大个数不大于其它所有个数的和

    如果只有第一个条件记录前缀和的奇偶性即可,接下来考虑去除不符合第二个条件的区间

    由于一个数最大有60个1且每个数至少有1个1,因此只要暴力查询区间长度小于60的区间即可

    Code:

    #include <bits/stdc++.h>
    
    using namespace std;
    #define X first
    #define Y second
    #define pb push_back
    typedef double db;
    typedef long long ll;
    typedef pair<int,int> P;
    const int MAXN=5e5+10;
    ll n,x,cnt[MAXN],pre[MAXN],odd,even,res;
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&x);
            while(x) cnt[i]+=x&1,x>>=1;
        }
        for(int i=1;i<=n;i++) 
            pre[i]=pre[i-1]+cnt[i];
        
        for(int i=1;i<=n;i++)
        {
            if(pre[i]%2==0)
                res+=even+1,even++;
            else res+=odd,odd++;
            res-=(pre[i]%2==pre[i-1]%2);
        }
        for(int i=1;i<=n;i++)
        {
            ll sum=cnt[i],mx=cnt[i];
            for(int j=i-1;j>=1&&j>=i-61;j--)
            {
                sum+=cnt[j];mx=max(cnt[j],mx);
                if(mx>sum-mx&&sum%2==0) res--;
            }
        }
        printf("%lld",res);
        return 0;
    }
  • 相关阅读:
    数据库设计三大范式
    MYSQL语句
    PHP数据库环境配置
    java空心菱形
    java基础练习2
    java基础练习
    java 控制台输入
    java 基础功能
    Java包装
    JS里的DOM操作注意点
  • 原文地址:https://www.cnblogs.com/newera/p/9705422.html
Copyright © 2011-2022 走看看