打卡信奥刷题(216)用Scratch图形化工具信奥P8942[普及组] Digital Fortress

Digital Fortress

题目背景

布林克霍夫大声喊道:“这当然是密码!这不是密码,还能是什么?还有什么原因能让友加送掉这枚戒指?到底是谁在戒指上刻一大串杂乱无章的字母?”

方丹愤怒地等了布林克霍夫一眼,使他安静了下来。

“啊……伙计们?”贝克插了一句话,似乎很不情愿卷进来一样,“你们一直说这些是杂乱无章的字母。我想我应该让你们知道……这枚戒指上刻的字母并不是杂乱无章。如果你近距离看一下,就会明白,实际上,这些字母……这个……这个是拉丁文。”

指挥台上的所有人都看向了那枚戒指。上面写道:

Quis custodiet ipsos custiodies.
谁来监视这些监视者……

题目描述

致命的变异串已经穿过了 X-11 过滤器,深入了国安局数据库。苏珊与贝克需要即时破解出密码,以关闭蠕虫病毒。

在蠕虫的文件中,他们找到了密码的一个特点:

  • 共有 n n n 位,每个数都在 [ 1 , m ] [1,m] [1,m] 之间,并且单调不减。
  • 如算出前缀异或和,那么前缀异或和也单调不减。
  • 如算出后缀异或和,那么后缀异或和仍然单调不减。

除此之外,他们也找到了 n , m n,m n,m 的值。现在,他们需要构造出一组密码,以满足所有特征。


【形式化题意】

求是否存在长度为 n n n,所有元素都在 [ 1 , m ] [1,m] [1,m] 范围内的单调不减正整数序列 a a a,满足:

  • ∀ 1 < i ≤ n , a 1  xor  a 2  xor  ⋯  xor  a i − 1 ≤ a 1  xor  a 2  xor  ⋯  xor  a i \forall1<i\le n,a_1\ \text{xor}\ a_2\ \text{xor}\ \cdots\ \text{xor}\ a_{i-1}\le a_1\ \text{xor}\ a_2\ \text{xor}\ \cdots\ \text{xor}\ a_{i} ∀1<in,a1 xor a2 xor  xor ai1a1 xor a2 xor  xor ai
  • ∀ 1 ≤ i < n , a n  xor  a n − 1  xor  ⋯  xor  a i + 1 ≤ a n  xor  a n − 1  xor  ⋯  xor  a i \forall1\le i<n,a_n\ \text{xor}\ a_{n-1}\ \text{xor}\ \cdots\ \text{xor}\ a_{i+1}\le a_n\ \text{xor}\ a_{n-1}\ \text{xor}\ \cdots\ \text{xor}\ a_{i} ∀1i<n,an xor an1 xor  xor ai+1an xor an1 xor  xor ai

如存在,输出一组合法解。多组数据。

输入格式

第一行一个正整数 t t t,表示数据组数。

对于每组数据,输入两个正整数 n , m n,m n,m

输出格式

对于每组数据,如不存在满足要求的密码,输出 No。否则,输出 Yes,并在下一行输出一种合法方案。

样例 #1

样例输入 #1

2
4 20
1919 114514

样例输出 #1

Yes
1 6 8 16
No

提示

【样例解释】

对于第一组数据,密码的前缀异或和为 { 1 , 7 , 15 , 31 } \{1,7,15,31\} {1,7,15,31},后缀异或和为 { 16 , 24 , 30 , 31 } \{16,24,30,31\} {16,24,30,31},均为递增序列,满足题意。

对于第二组数据,不存在任何合法方案。

【数据范围】

本题开启捆绑测试。

Subtask \text{Subtask} Subtask分值 n ≤ n\le n m ≤ m\le m
0 0 0 10 10 10 5 5 5 200 200 200
1 1 1 30 30 30 20 20 20 1 0 6 10^6 106
2 2 2 60 60 60 1 0 5 10^5 105 2 63 − 1 2^{63}-1 2631

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 5 1\le n\le10^5 1n105 1 ≤ m ≤ 2 63 − 1 1\le m\le2^{63}-1 1m2631 1 ≤ t ≤ 50 1\le t\le50 1t50

Scratch实现

在这里插入图片描述

后续

接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值