美文网首页
XOR Sorting 题解

XOR Sorting 题解

作者: 魏宝器 | 来源:发表于2018-07-29 16:25 被阅读0次

    题目描述:
    Given a sequence a[1..n], you need to calculate how many integers S satisfy the following conditions:

    (1). 0 ≤ S < 260

    (2). For every i in [1,n-1] , (a[i] xor S) ≤ (a[i+1] xor S)

    Input
    On the first line there is only one integer n

    On the second line there are n integers a[1..n]

    1 ≤ n ≤ 50

    0 ≤ a[i] < 260

    Output
    Output one integer : the answer


    Sample Input
    3
    1 2 3
    Sample Output
    288230376151711744


    题解:将ai与a(i+1)的十进制转换为二进制,然后比较从某个位置开始的不同,如果某个位置不同,则标记此位置。设此位置为x,则x以前的所有位数都不想关。
    特此感谢任大大。


    AC代码:

    include<iostream>

    include<algorithm>

    include<cmath>

    using namespace std;
    long long a[60];
    int aa[60];
    int bb[60];
    int visit[60]={0};
    typedef long long ll;
    int main()
    {
    int cnt = 0;
    int n;
    cin >> n;
    for(int i=0;i<n;i++)
    {
    cin >> a[i];
    }
    for(int i=0;i<n-1;i++)
    {
    ll ax = a[i];
    ll bx = a[i+1];
    for(int j=0;j<60;j++)
    {
    aa[j] = ax%2;
    ax/=2;
    }
    for(int j=0;j<60;j++)
    {
    bb[j] = bx%2;
    bx /= 2;
    }
    for(int j=59;j>=0;j--)
    {
    if(aa[j]!=bb[j])
    {
    visit[j] = 1;
    break;
    }
    }
    }
    for(int i=59;i>=0;i--)
    {
    if(visit[i]==1)
    cnt++;
    }
    long long ans = (1ll<<(60-cnt));
    printf("%lld",ans);
    return 0;
    }

    相关文章

      网友评论

          本文标题:XOR Sorting 题解

          本文链接:https://www.haomeiwen.com/subject/akttvftx.html