整理的算法模板:ACM算法模板总结(分类详细版)
题目链接:https://codeforces.ml/contest/1332/problem/D
思路:看了大佬的才知道这么巧妙的构造,题中说差值为k,那么可以构造一个矩阵按照他的算法算出来是0,但实际上为k;
先让矩阵右下角为k,然后设一个大于k的数n,这个n必须是一个2的次方数(2的次方数比较特殊,因为二进制中只有一个1)
那么k&n一定是0,(n+k)&k==k,n&(n+k)==n;根据这些从右下角往左上角类推就得到三阶矩阵:
n+k n n
k n n+k
k n+k k
(csdn公式加载不出来,是我网速太慢了还是.....qaq)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k;
cin >>k;
int n;
for(int i=0;i<=32;i++)
{
n=1<<i;
if(n>k) break;
}
cout <<3<<" "<<3<<endl;
cout <<n+k<<" "<<n<<" "<<n<<endl;
cout <<k<<" "<<n<<" "<<n+k<<endl;
cout <<k<<" "<<n+k<<" "<<k<<endl;
}