zoukankan      html  css  js  c++  java
  • H

    规律题

    首先我们要知道他的顺序是怎么来的,首先当n等于1时,是0,1 当n=2时,先按照与按顺序在他们前面分别加0,即00,01,在逆序加1,即11,10 构成的顺序为00,01,11,10;往后同理

    规律,顺序排好后,对某个字符,我们对前n项求异或 即arr[i]^=arr[i-1],就可以将其转换为对应的二进制形式,值得注意的地方就是要用ll,还有就是二进制转换为10进制的过程

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll bit1[100];
    ll bit2[100];
    void solve(){
        int n;
        cin>>n; 
        ll m=1ll*1<<n;
        string s1,s2;
        cin>>s1>>s2;
        ll l=0,r=0;
        for(int i=1;i<=n;i++){
            m>>=1;
            bit1[i]=s1[i-1]-'0';
            bit1[i]^=bit1[i-1];
            l+=bit1[i]*m;
        }
        m=1ll*1<<n;
        for(int i=1;i<=n;i++){
            m>>=1;
            bit2[i]=s2[i-1]-'0';
            bit2[i]^=bit2[i-1];
            r+=bit2[i]*m;
        }
        cout<<r-l-1<<endl;
    }
    int main(){
        solve();
        return 0;
    }
  • 相关阅读:
    Git常用命令
    maven profile动态选择配置文件
    Nodejs的偏函数
    用CountDownLatch来同步java的多线程
    NodeJS的Promise的用法
    alluxio常用命令
    常见小代码
    Mongodb
    Mysql_常用语法
    PostgreSQL
  • 原文地址:https://www.cnblogs.com/Accepting/p/11628965.html
Copyright © 2011-2022 走看看