zoukankan      html  css  js  c++  java
  • Perfect Triples CodeForces 1339E

    Consider the infinite sequence ss of positive integers, created by repeating the following steps:

    1. Find the lexicographically smallest triple of positive integers (a,b,c)(a,b,c) such that
      • abc=0a⊕b⊕c=0, where ⊕ denotes the bitwise XOR operation.
      • aa, bb, cc are not in ss.
      Here triple of integers (a1,b1,c1)(a1,b1,c1) is considered to be lexicographically smaller than triple (a2,b2,c2)(a2,b2,c2) if sequence [a1,b1,c1][a1,b1,c1] is lexicographically smaller than sequence [a2,b2,c2][a2,b2,c2].
    2. Append aa, bb, cc to ss in this order.
    3. Go back to the first step.

    You have integer nn. Find the nn-th element of ss.

    You have to answer tt independent test cases.

    A sequence aa is lexicographically smaller than a sequence bb if in the first position where aa and bb differ, the sequence aa has a smaller element than the corresponding element in bb.

    Input

    The first line contains a single integer tt (1t1051≤t≤105) — the number of test cases.

    Each of the next tt lines contains a single integer nn (1n10161≤n≤1016) — the position of the element you want to know.

    Output

    In each of the tt lines, output the answer to the corresponding test case.

    Example

    Input
    9
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Output
    1
    2
    3
    4
    8
    12
    5
    10
    15
    

    Note

    The first elements of ss are 1,2,3,4,8,12,5,10,15,

    ACcode#1

    #include <bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    const int inf = 1e8;
    const int mod = 1000000007;
    const int mx = 100010; //check the limits, dummy
    typedef pair<int, int> pa;
    const double PI = acos(-1);
    ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
    #define swa(a,b) a^=b^=a^=b
    #define re(i,a,b) for(int i=(a),_=(b);i<_;i++)
    #define rb(i,a,b) for(int i=(b),_=(a);i>=_;i--)
    #define clr(a) memset(a, 0, sizeof(a))
    #define lowbit(x) ((x)&(x-1))
    #define mkp make_pair
    void sc(int& x) { scanf("%d", &x); }void sc(int64_t& x) { scanf("%lld", &x); }void sc(double& x) { scanf("%lf", &x); }void sc(char& x) { scanf(" %c", &x); }void sc(char* x) { scanf("%s", x); }
    ll  m, n,t,x,k,ans=0,sum=0;
    ll a,b,c;
    void fuck(ll x) {
        ll now = 1;
        b = c = 0;
        while (x)
        {
            if (x % 4 == 1)b += 2 * now, c += 3 * now;
            if (x % 4 == 2)b += 3 * now, c += now;
            if (x % 4 == 3)b += now, c += 2 * now;
            x /= 4, now *= 4;
        }
    }
    int main()
    {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        cin >> t;
        while (t--) {
            cin >> n;
            ll x = (n - 1) / 3 + 1;
            ll now = 1;
            a = 1;
            while (x>now)
            {
                x -= now;
                a *= 4;
                now *= 4;
            }
            a += x - 1;
            fuck(a);
            if (n % 3 == 1)cout << a << endl;
            if( n % 3 == 2 )cout<< b << endl;
            if (n % 3 == 0)cout << c << endl;
        }
        return 0;
    }

     ACcode#2

    #include<bits/stdc++.h>
    #include <array>
    using namespace std;
    using ULL = unsigned long long;
    using UL = unsigned;
    using LL = long long;
    #define rep(i, n) for(UL i = 0; i < (n); i++)
    
    template<class Ty>
    using passive_queue = priority_queue<Ty, vector<Ty>, greater<Ty>>;
    
    struct Problem {
        void Loop() {
            ULL N; cin >> N;
            UL dig = 0; while (1ull << (dig * 2) <= N) dig++;
            dig--;
            N -= (1ull << (dig * 2));
            ULL D = N / 3, I = N % 3;
            ULL ans = (I + 1) << (dig * 2);
    
            ULL Tb[4][3] = { {0,0,0}, {1,2,3}, {2,3,1}, {3,1,2} };
            rep(i, dig) {
                ans |= Tb[D & 3][I] << (i * 2);
                D >>= 2;
            }
            cout << ans << endl;
        }
    
        void Solve() {
            UL T; cin >> T;
            rep(t, T) Loop();
        }
    
        Problem();
    };
    int main() {
        unique_ptr<Problem> p(new Problem());
        p->Solve();
        return 0;
    }
    Problem::Problem() {
        cout << fixed << setprecision(10);
    }
  • 相关阅读:
    【ROC曲线】关于ROC曲线、PR曲线对于不平衡样本的不敏感性分析说引发的思考
    MathJax测试
    现有C2B模式小总结
    语音识别技术简介
    Spark运行调试方法与学习资源汇总
    [Apache Spark源码阅读]天堂之门——SparkContext解析
    对三维数据集的K-means聚类研究
    根据《关于“k-means算法在流式细胞仪中细胞分类的应用”的学习笔记总结》撰写的中期报告
    关于《k-means算法在流式细胞仪中细胞分类的应用》的学习笔记总结
    用shell脚本自动化安装hadoop
  • 原文地址:https://www.cnblogs.com/xxxsans/p/12703972.html
Copyright © 2011-2022 走看看