Codeforces Round #630 (Div. 2)-D. Walk on Matrix

整理的算法模板: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;
}
发布了231 篇原创文章 · 获赞 60 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43872728/article/details/105245632