zoukankan      html  css  js  c++  java
  • Walk on Matrix

    Walk on Matrix

    Walk on Matrix 题目链接

    思路

    我们先想一下有没有可能存在一种特殊情况,用题目的algorithm算的的结果是0,而我们的正确答案是k。

    于是我们有了如下构造

    其中A的各个位上都是1,(B = ar{A} + ar{K}),也就是异或,这里的加号是逻辑上的或,(C = K)

    所以有两条路到D

    • (A->B->D),其值为(A(ar {A} + ar {K})D = ar {K}D)
    • (A->C->D),其值为(AKD = KD)

    要使其中的一个为零一个为K,则(D = ar {K})

    我们考虑走到B时,(B =A(ar {A} + ar {K})),走到C时,(C = K),接下来我们考虑如何变化能使B > C

    我们对B,C同时与上一个A得到(B =ar {A} + ar {K}, C = K),我们知道K是小于1e5的所以k最高位是16位,而A的有17位,我们明显得到(B =ar {A} + ar {K} > C = K)

    于是我们有了一个2 * 3的特殊矩阵。

    (A, ar{A} + ar {K}, A)

    (K, A, K)

    代码

    这道题目真是构造了一个多小时啊。

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        int k;
        cin >> k;
        cout << 2 << " " << 3 << "
    ";
        cout << ((1 << 18) - 1) << " " << (((1 << 18) - 1) ^ k) << " " << ((1 << 18) - 1) << "
    ";
        cout << k << " " << ((1 << 18) - 1) << " " << k << "
    ";
        return 0 ;
    }
    
  • 相关阅读:
    iOS适配 旧项目工程在iOS9下不能正常显示
    字典的操作
    均摊时间复杂度
    C++基础
    机器学习入门学习线路
    C\C++对文件的读写操作
    python 函数基础
    关于string的练习题目
    C++之STL之string
    C++STL库之set的用法
  • 原文地址:https://www.cnblogs.com/lifehappiness/p/12802657.html
Copyright © 2011-2022 走看看