zcmimi's blog
查看原题

点击跳转

那个只要有 10000…… 11000…… …… 就可以一直搞下去 直到为0

但是也有特殊情况:

比如k \le 4

不过这种情况特判和dfs都可以解决

#include<bits/stdc++.h>
namespace ZDY{
    #pragma GCC optimize(3)
    #define il __inline__ __attribute__ ((always_inline))
    #define rg register
    #define ll long long
    #define ull unsigned long long
    #define db double
    #define sht short
    #define MB template <class T>il
    #define Fur(i,x,y) for(int i=x;i<=y;i++)
    #define Fdr(i,x,y) for(int i=x;i>=y;i--)
    #define fl(i,x) for(int i=head[x],to;to=e[i].to,i;i=e[i].nxt)
    #define clr(x,y) memset(x,y,sizeof(x))
    #define cpy(x,y) memcpy(x,y,sizeof(x))
    #define fin(s) freopen(s".in","r",stdin)
    #define fout(s) freopen(s".out","w",stdout)
    #define fcin ios::sync_with_stdio(false)
    #define l2(n) (int(log2(n)))
    #define inf 0x3f3f3f3f
    MB T ABS(T x){return x>0?x:-x;}
    MB T MAX(T x,T y){return x>y?x:y;}
    MB T MIN(T x,T y){return x<y?x:y;}
    MB T GCD(T x,T y){return y?GCD(y,x%y):x;}
    MB void SWAP(T &x,T &y){T t=x;x=y;y=t;}
}using namespace ZDY;using namespace std;
#define N 10001
ll l,r;
int k;
void work(){
    ll t=1ll<<l2(l);
    if(r>=(t+(t<<1)))cout<<0;
    else cout<<1;
}
ll ans;
void dfs(ll x,ll y){
    if(x>r){
        ans=MIN(ans,y);
        return;
    }
    dfs(x+1,y);dfs(x+1,y^x);
}
int main(){
    cin>>l>>r>>k;
    if(k==1)return cout<<l,0;
    if(k==2){
        if(r-l<=1)cout<<MIN(l,l^r);
        else cout<<1;
        return 0;
    }
    if(k==3)work();
    if(k>3){
        if(r-l+1==4){
            ans=1;
            dfs(l+1,l);
            dfs(l+2,l+1);
            dfs(l+3,l+2);
            dfs(l+4,l+3);
            cout<<ans;
        }
        else cout<<0;
    }

}
51nod 1496 最小异或和
comment评论
Search
search