• C. Baby Ehab Partitions Again


    题意:

    如果一个序列被称为好序列,那么它不能被划分成两个值相等的序列(划分时可以跳着取)

    问我们最少需要删去多少个值,使得序列变好,输出删去的个数以及哪些值

    解法:

    若序列和为奇数,那么已经是好序列

    若序列和为偶数,那么背包判断是否可以分成两个值相等的序列

      如果不可以,那么说明它也是好序列

      如果可以,判断两个子序列是否有奇数

            如果有,删去这个奇数就能使它变好

            如果没有,说明序列中都是偶数,那么全体除二,再找是否有奇数,找不到再除2,直到找到。

            那么这段就是说,如果都是偶数,找最小的数即可,用二进制理解一下,可以用gcd加速这个过程

    #include<bits/stdc++.h>
    #define ll long long
    #define inf 0x3f3f3f3f
    using namespace std;
    const ll maxn = 2e6+10;
    ll n,a[maxn],t,sum=0;
    bitset<maxn>b;
    int main(){
        ios::sync_with_stdio(false);
        cin>>n;b[0]=1;
        for(int i=1;i<=n;++i){
            cin>>a[i];
            sum+=a[i];
            b|=(b<<a[i]);
        }
        if((sum&1)||(!b[sum>>1])){
            printf("0
    ");
            return 0;
        }
        ll g=0;
        for(int i=1;i<=n;++i){
            g=__gcd(g,a[i]);
        }
        for(int i=1;i<=n;++i){
            a[i]=a[i]/g;
        }
        for(int i=1;i<=n;++i){
            if(a[i]&1){
                printf("1
    %d
    ",i);
                return 0;
            }
        }
        return 0;
    }
  • 相关阅读:
    English,The Da Vinci Code,Chapter 1-3
    Algorithm,Ds,Binary Indexed Trees,树状数组,二分索引树
    Algorithm,Acm,RMQ
    Algorithm,Number Theory,Prime
    Algorithm,Number Theory,GCD
    English,The Da Vinci Code
    Algorithm,LCA,Tarjan,深搜+并查集,最近公共祖先
    python,keyword arguments
    Qt,QObject
    python,build in functions
  • 原文地址:https://www.cnblogs.com/PdrEam/p/14691356.html
Copyright © 2020-2023  润新知