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

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

文章目录

    • @[toc]
      • 试题编号
      • 试题名称
      • 时间限制
      • 内存限制
      • 题目背景
      • 题目描述
      • 输入格式
      • 输出格式
      • 样例1输入
      • 样例1输出
      • 样例2输入
      • 样例2输出
      • 样例3输入
      • 样例3输出
      • 样例3解释
      • 子任务
      • 提示
      • `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输入

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

样例2输入

4 0
2 3 2 5

样例2输出

0 0 0 0

样例3输入

7 23333
3 5 20 10 4 3 10

样例3输出

2 2 15 7 3 1 0

样例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 = 1for i in range(n):temp = cc *= a[i]b.append((m % c) // temp)print(*b)

http://www.lryc.cn/news/255539.html

相关文章:

  • std::function
  • SQL Server——权限管理
  • 实例解析关于兔鲜登录tab栏切换案例详细讲解!
  • 制作一个RISC-V的操作系统三-编译与链接
  • tmux工具--程序部署在服务器上持久化执行
  • C语言精选——选择题Day39
  • React 笔记 jsx
  • QMenu风格设计qss+阴影
  • temu防窒息警示语贴哪里
  • Maven——坐标和依赖
  • Python中事务的常见用法
  • 蛮力法最大值连续子序问题
  • 多功能智能遥测终端机 5G/4G+北斗多信道 视频采集传输
  • 1.查看表的基本结构,表的详细结构和修改表名
  • Mybatis实用教程之XML实现动态sql
  • 混合App开发实现页面跳转(更新中)
  • 【FPGA】Verilog:BCD 加法器的实现
  • 机器学习第15天:GBDT模型
  • STM32F407-14.3.9-01输出比较模式
  • LeetCode题:174. 地下城游戏
  • CSS、JS文件无法正确加载至页面问题与解决
  • ftp的服务安装配置
  • 原码,补码,反码(极简版)
  • uniapp监听wifi连接状态
  • 2023年总结和2024年展望(以ue为主攻)
  • 南京大学计算机学院面试准备
  • API成批分配漏洞介绍与解决方案
  • 跨网文件摆渡系统:安全、可控的数字传输桥梁
  • 线程池的原理和基本使用~
  • PyTorch2.0环境搭建