当前位置: 首页 > article >正文

【CSP】202209-1_如此编码Python实现

文章目录

试题编号

202209-1

试题名称

如此编码

时间限制

1.0s

内存限制

512.0MB

题目背景

  • 某次测验后,顿顿老师在黑板上留下了一串数字 23333 23333 23333便飘然而去,凝望着这个神秘数字,小 P P P同学不禁陷入了沉思

题目描述

  • 已知某次测验包含 n n n道单项选择题,其中第 i i i ( 1 ≤ i ≤ n ) (1 \leq i \leq n) (1in) a i a_{i} ai个选项,正确选项为 b i b_{i} bi,满足 a i ≥ 2 a_{i} \geq 2 ai2 0 ≤ b i < a i 0 \leq b_{i} < a_{i} 0bi<ai
  • 比如说, a i = 4 a_{i} = 4 ai=4表示第 i i i题有 4 4 4个选项,此时正确选项 b i b_{i} bi的取值一定是 0 0 0 1 1 1 2 2 2 3 3 3其中之一
  • 顿顿老师设计了如下方式对正确答案进行编码,使得仅用一个整数 m m m便可表示 b 1 b_{1} b1 b 2 b_{2} b2 ⋯ \cdots b n b_{n} bn
  • 首先定义一个辅助数组 c i c_{i} ci,表示数组 a i a_{i} ai的前缀乘积,当 1 ≤ i ≤ n 1 \leq i \leq n 1in时,满足:

c i = a 1 × a 2 × ⋯ × a i c_{i} = a_{1} \times a_{2} \times \cdots \times a_{i} ci=a1×a2××ai

  • 特别地,定义 c 0 = 1 c_{0} = 1 c0=1
  • 于是 m m m便可按照如下公式算出

m = ∑ i = 1 n c i − 1 × b i = c 0 × b 1 + c 1 × b 2 + ⋯ + c n − 1 × b n \begin{aligned} m &= \displaystyle\sum\limits_{i = 1}^{n}{c_{i - 1} \times b_{i}} \\ &= c_{0} \times b_{1} + c_{1} \times b_{2} + \cdots + c_{n - 1} \times b_{n} \end{aligned} m=i=1nci1×bi=c0×b1+c1×b2++cn1×bn

  • 易知, 0 ≤ m < c n 0 \leq m < c_{n} 0m<cn,最小值和最大值分别当 b i b_{i} bi全部为 0 0 0 b i = a i − 1 b_{i} = a_{i} - 1 bi=ai1时取得
  • 试帮助小 P P P同学,把测验的正确答案 b 1 b_{1} b1 b 2 b_{2} b2 ⋯ \cdots b n b_{n} bn从顿顿老师留下的神秘整数 m m m中恢复出来

输入格式

  • 从标准输入读入数据
  • 输入共两行
  • 第一行包含用空格分隔的两个整数 n n n m m m,分别表示题目数量和顿顿老师的神秘数字
  • 第二行包含用空格分隔的 n n n个整数 a 1 a_{1} a1 a 2 a_{2} a2 ⋯ \cdots a n a_{n} an,依次表示每道选择题的选项数目

输出格式

  • 输出到标准输出
  • 输出仅一行,包含用空格分隔的 n n n个整数 b 1 b_{1} b1 b 2 b_{2} b2 ⋯ \cdots b n b_{n} bn,依次表示每道选择题的正确选项

样例 1 1 1输入

15 32767
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

样例 1 1 1输出

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

样例 2 2 2输入

4 0
2 3 2 5

样例 2 2 2输出

0 0 0 0

样例 3 3 3输入

7 23333
3 5 20 10 4 3 10

样例 3 3 3输出

2 2 15 7 3 1 0

样例 3 3 3解释

i i i 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7
a i a_{i} ai 3 3 3 5 5 5 20 20 20 10 10 10 4 4 4 3 3 3 10 10 10
b i b_{i} bi 2 2 2 2 2 2 15 15 15 7 7 7 3 3 3 1 1 1 0 0 0
c i − 1 c_{i - 1} ci1 1 1 1 3 3 3 15 15 15 300 300 300 3000 3000 3000 12000 12000 12000 36000 36000 36000

子任务

  • 50 % 50\% 50%的测试数据满足: a i a_{i} ai全部等于 2 2 2,即每道题均只有两个选项,此时 c i = 2 i c_{i} = 2^{i} ci=2i
  • 全部的测试数据满足: 1 ≤ n ≤ 20 1 \leq n \leq 20 1n20 a i ≥ 2 a_{i} \geq 2 ai2 c n ≤ 1 0 9 c_{n} \leq 10^{9} cn109(根据题目描述中的定义 c n c_{n} cn表示全部 a i a_{i} ai的乘积)

提示

  • 对任意的 1 ≤ j ≤ n 1 \leq j \leq n 1jn,因为 c j + 1 c_{j + 1} cj+1 c j + 2 c_{j + 2} cj+2 ⋯ \cdots 均为 c j c_{j} cj的倍数,所以 m m m除以 c j c_{j} cj的余数具有如下性质:

m % c j = ∑ i = 1 j c i − 1 × b i m \% c_{j} = \displaystyle\sum\limits_{i = 1}^{j}{c_{i - 1} \times b_{i}} m%cj=i=1jci1×bi

  • 其中 % \% %表示取余运算,令 j j j取不同的值,则有如下等式:

m % c 1 = c 0 × b 1 m % c 2 = c 0 × b 1 + c 1 × b 2 m % c 2 = c 0 × b 1 + c 1 × b 2 + c 2 × b 3 \begin{aligned} m \% c_{1} &= c_{0} \times b_{1} \\ m \% c_{2} &= c_{0} \times b_{1} + c_{1} \times b_{2} \\ m \% c_{2} &= c_{0} \times b_{1} + c_{1} \times b_{2} + c_{2} \times b_{3} \end{aligned} m%c1m%c2m%c2=c0×b1=c0×b1+c1×b2=c0×b1+c1×b2+c2×b3


Python实现

n, m = map(int, input().split())
a = list(map(int, input().split()))

b = []
c = 1

for i in range(n):
    temp = c

    c *= a[i]

    b.append((m % c) // temp)

print(*b)


http://www.kler.cn/a/160593.html

相关文章:

  • 【Vue】Vue3.0(十九)Vue 3.0 中一种组件间通信方式-自定义事件
  • 以色列支付龙头遭DDoS攻击,各地超市加油站等POS机瘫痪
  • Wireshark
  • YUM 的使用
  • 使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行
  • 企业如何提高团队管理的能力?
  • 2022年第十一届数学建模国际赛小美赛B题序列的遗传过程解题全过程文档及程序
  • 有关thingsboard中 api的 jwt研究
  • 利用JavaFX生成验证码图片
  • mysql服务日志打印,时区不对的问题
  • 【C语言】7-38 吉老师的回归 分数 15
  • 《异常检测——从经典算法到深度学习》24 用于单变量时间序列异常检测的端到端基准套件
  • Chapter 7. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理 - 1
  • Cocos Creator加入图片没有被识别
  • 【算法】约瑟夫环
  • Audacity降噪消除视频中杂音
  • 面试操作系统八股文五问五答第一期
  • OSI七层模型与TCP/IP四层模型
  • 《形式语言与自动机理论(第4版)》笔记(二)
  • elment-ui部分ui组件在移动端也能实现自适应
  • Altair推出 Altair RapidMiner 2023 平台,提供生成式 AI 功能
  • 【数据挖掘】国科大苏桂平老师数据库新技术课程作业 —— 第一次作业
  • 【前端设计模式】之工厂模式
  • 文档一键黏贴供应商
  • sql常用语法练习
  • WTV380语音芯片赋能电蒸锅:智能声音提示与数码管显示驱动引领未来厨房革新