zoukankan      html  css  js  c++  java
  • D. Not Quite Lee 题解(裴蜀定理+思维)

    题目链接

    题目思路

    首先考虑只有奇数,那么显然可以,因为奇数可以直接变为0

    假如都是偶数偶数全部看成\(a[i]/2\)

    那么最后就要满足$ (sum/2) % gcd == 0$ , 这些数的\(gcd\)至少是\(lowbit\) , 如果最小 l\(owbit\) 只有奇数个 那么 sum / 2

    之后 肯定不是最小lowbit的倍数了

    那么有奇数和有偶数得情况下,显然可以变为0

    感觉这个好难解释,其实本质上就是利用裴蜀定理

    代码

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define debug cout<<"I AM HERE"<<endl;
    using namespace std;
    typedef long long ll;
    const int maxn=2e5+5,inf=0x3f3f3f3f,mod=1e9+7;
    const double eps=1e-6;
    int n;
    int a[maxn];
    int cnt[maxn];
    ll qw2[maxn];
    signed main(){
        scanf("%d",&n);
        qw2[0]=1;
        for(int i=1;i<=n;i++){
            qw2[i]=qw2[i-1]*2%mod;
        }
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            for(int j=30;j>=1;j--){
                if(a[i]%(1<<j)==0){
                    cnt[j]++;
                    break;
                }
            }
        }
        ll ans=qw2[n]-1;
        for(int i=1;i<=30;i++){
            if(cnt[i]==0) continue;
            int tmp=0;
            for(int j=i+1;j<=30;j++){
                tmp=tmp+cnt[j];
            }
            ans=(ans-qw2[cnt[i]-1]*qw2[tmp])%mod;
        }
        ans=(ans%mod+mod)%mod;
        printf("%lld\n",ans);
        return 0;
    }
    
    
    不摆烂了,写题
  • 相关阅读:
    百奥谷
    3月13日火箭VS老鹰
    百度 hi 下载地址(内测版,正式版)
    中兴u980
    2008年清明节放假通知
    cyp740703 一个女人的自白
    黄唇鱼
    3月9日火箭vs黄蜂
    3月3日火箭vs掘金
    百度hi邀请码
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/15599876.html
Copyright © 2011-2022 走看看