D. Walk on Matrix(构造矩阵)

Problem - 1332D - Codeforces

题意:

  • 假设有一个数字矩阵,每次可以向下或向右,问从左上角走到右下角的数字和最多是多少,那么显然这是一个dp。
  • 现在不问你数字和,而是把路径上的所有数都&起来,如果还是dp显然是错的。假设dp的到的结果是x,正确答案是y。
  • 现在给定k,需要你构造一个矩阵,使得y-x = k;

题解:我们是不可能构造一个太大的矩阵,所以我们要从小开始考虑

迫使正确输出答案为k,Bob代码输出为0

假如这是一个2*2的矩阵,我们很容易想到他的代码是都可以成立的

那么2*3的矩阵呢?

假如ans是一个二进制位除最高位均0为很大的数,那么他的代码是肯定不成立的

ans+k     k     0

  ans    ans+k     k

思想就是先让初始值分化为一大一小值,让其代码按他取大,但是结果要取小值

为什么是1<<17,不能是1<<19或1<<16,其他均会错(卖个关子,仔细读读题)

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int k;
	cin >> k;
	long long ans =1<<17;
	cout<<2<<" 3\n";
	cout<<ans+k<<" "<<k<<" "<<0<<"\n";
	cout<<ans<<" "<<ans+k<<" "<<k;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值