Acwing4699. 如此编码

news2024/12/27 12:45:54

某次测验后,顿顿老师在黑板上留下了一串数字 23333 便飘然而去。

凝望着这个神秘数字,小 P 同学不禁陷入了沉思……

已知某次测验包含 nn 道单项选择题,其中第 i 题(1≤i≤n)有 ai 个选项,正确选项为 bi,满足 ai≥2 且 0≤bi<ai。

比如说,ai=4 表示第 i 题有 4 个选项,此时正确选项 bi 的取值一定是 0、1、2、3 其中之一。

顿顿老师设计了如下方式对正确答案进行编码,使得仅用一个整数 m 便可表示 b1,b2,⋯,bn。

首先定义一个辅助数组 ci,表示数组 ai 的前缀乘积。

当 1≤i≤n 时,满足:

ci=a1×a2×⋯×ai

特别地,定义 c0=1。

于是 m 便可按照如下公式算出:

m=∑ni=1ci−1×bi=c0×b1+c1×b2+⋯+cn−1×bn

易知,0≤m<cn,最小值和最大值分别当 bi 全部为 0 和 bi=ai−1 时取得。

试帮助小 P 同学,把测验的正确答案 b1,b2,⋯,bn 从顿顿老师留下的神秘整数 m 中恢复出来。

输入格式

输入共两行。

第一行包含用空格分隔的两个整数 n 和 m,分别表示题目数量和顿顿老师的神秘数字。

第二行包含用空格分隔的 n 个整数 a1,a2,⋯,an,依次表示每道选择题的选项数目。

输出格式

输出仅一行,包含用空格分隔的 n 个整数 b1,b2,⋯,bn,依次表示每道选择题的正确选项。

数据范围

50% 的测试数据满足:ai 全部等于 2,即每道题均只有两个选项,此时 ci=2i;
全部的测试数据满足:1≤n≤20,ai≥2 且 cn≤10^9(根据题目描述中的定义 cn 表示全部 ai 的乘积)。

输入样例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解释

提示

对任意的 1≤j≤n,因为 cj+1,cj+2,⋯ 均为 cj 的倍数,所以 m 除以 cj 的余数具有如下性质:

m % cj=∑i=1jci−1×bi

其中 % 表示取余运算。

令 j 取不同的值,则有如下等式:

m % c1m % c2m % c3=c0×b1=c0×b1+c1×b2=c0×b1+c1×b2+c2×b3⋯

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;
int n , m;
const int N = 30;
int a[N] , b[N] , c[N] = {1} , qz[N];
/*void dfs(int k , int sum){
	
	if(k > n && sum == m){
		for(int i = 1 ; i <= n ; i ++)
			cout << b[i] << " ";
	}
	else
		for(int i = 0 ; i < a[k] ; i ++){
			int res = 0;
			res += sum + i * c[k - 1];
			b[k] = i;
			dfs(k + 1 , res);
			b[k] = 0;		
		}	
}*/
int main(){
	cin >> n >> m;
	for(int i = 1 ; i <= n ; i ++){
		cin >> a[i];
		c[i] = a[i] * c[i - 1];
	}
	//dfs(1 , 0);
	qz[1] = m % c[1];
	b[1] = qz[1] / c[0];
	cout << b[1] << " ";
	for(int i = 2 ; i <= n ; i ++){
		qz[i] = m % c[i] - m % c[i - 1]; 
		b[i] = qz[i] / c[i - 1];
		cout << b[i] << " ";
	}
	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/164102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAS And Atomic

CAS(Compare And Swap 比较并交换)&#xff0c;通常指的是这样一种原子操作&#xff1a;针对一个变量&#xff0c;首先比较它的内存值与某个期望值是否相同&#xff0c;如果相同&#xff0c;就给它赋一个新值,底层是能保证cas是原子性的CAS的应用 在Java 中&#xff0c;CAS 操作…

Android开发-AS学习(三)(布局)

相关文章链接&#xff1a;Android开发-AS学习&#xff08;一&#xff09;&#xff08;控件&#xff09;Android开发-AS学习&#xff08;二&#xff09;(控件&#xff09;Android开发应用案例——简易计算器&#xff08;附完整源码&#xff09;二、布局2.1 Linearyout常见属性说…

测试NGINX和uwsgi.ini设置

1.uwsgi修改测试 将服务器升级到16核16G配置后&#xff0c;我将uwsgi.ini中的部分参数调整如下&#xff1a; processes 32 threads 16 结果是导致内存暴满&#xff0c;然后直接服务器都无法连接&#xff0c;导致服务器卡死。之前有博客说processes处理器*2&#xff0c;结果…

【阶段三】Python机器学习26篇:机器学习项目实战:LightGBM回归模型

本篇的思维导图: 项目实战(LightGBM回归模型) 项目背景 为促进产品的销售,厂商经常会通过多个渠道投放广告。本案例将根据某公司在电视、广播和报纸上的广告投放数据预测广告收益,作为公司制定广告策略的重要参考依据。 本项目应用LightGBM回归算法进行项目实战,整…

Nginx入门

介绍&#xff1a; 下载和安装&#xff1a; 安装过程&#xff1a; 1、因为nginx是由c语言编写的&#xff0c;所以需要下载gcc进行编译 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel 2、下载nginx安装包 wget https://nginx.org/download/nginx-1.16.1.ta…

【Java基础知识 1】第一个Java程序(Java的第一步)

本文已收录专栏 &#x1f332;《Java进阶之路》&#x1f332; 编写一个Java程序 第一个Java程序非常简单&#xff0c;代码如下&#xff1a; public class Java01_HelloWorld {public static void main(String[] agrs){System.out.println("欢迎来到Java进阶之路&#x…

蓝桥杯 stm32 按键点灯 CubeMX

注&#xff1a;我们使用的是 HAL 库 文章目录前言一、按键 原理图&#xff1a;二、按键CubeMX配置:三、代码讲解1. 读按键&#xff1a;&#xff08; 三行代码&#xff09;2.按键消抖&#xff1a;3&#xff0c;按键点灯&#xff1a;总结实验效果&#xff1a;前言 一、按键 原理…

基于yolov5-v7.0开发构建银行卡号实例分割检测识别分析系统

在之前的文章中我们已经做了很多基于yolov5完成实例分割的项目&#xff0c;感兴趣的话可以自行移步阅读&#xff1a;《基于YOLOv5-v7.0的药片污染、缺损裂痕实例分割检测识别分析系统》《基于yolov5-v7.0开发构建裸土实例分割检测识别模型》《基于yolov5-v7.0开发实践实例分割模…

CSDN第24期周赛(记录一下)

▶ 爱要坦荡荡 (163.com) 每一道题都有思路&#xff0c;可是只有一道Accepted100%&#xff0c;一道很简单的50%&#xff0c;一道输出错误10%并报错Segmentation Fault&#xff0c;一道字符串有思路但是没时间了 一&#xff0c;蛇皮矩阵 Accepted 10% 报错Segmentation Fault…

2、矩阵介绍

目录 一、矩阵的构造 二、矩阵大小及结构的改变 三、矩阵下标的引用 1.矩阵下标访问单个矩阵元 2.线性引用矩阵元 3.访问多个矩阵元素 四、矩阵信息的提取 1.矩阵结构 2.矩阵大小 3.矩阵的数据类型 一、矩阵的构造 矩阵的构建方式有两种&#xff0c;一种与单元数组相…

【寒假每日一题】DAY.7 有序序列判断

牛客网例题&#xff1a;点我做题 【❤️温馨提示】先做题&#xff0c;再看讲解效果更佳哟 描述 输入一个整数序列&#xff0c;判断是否是有序序列&#xff0c;有序&#xff0c;指序列中的整数从小到大排序 或者从大到小排序(相同元素也视为有序)。输入描述&#xff1a; 第一行…

【C++】stack、queue的模拟实现及deque介绍

一、stack 1. 以vector作为底层容器 从栈的接口中可以看出&#xff0c;栈实际是一种特殊的vector&#xff0c;因此使用vector完全可以模拟实现stack。 由于stack的所有工作是底层容器完成的&#xff0c;而这种具有“修改某物接口&#xff0c;形成另一种风貌”的性质&#xf…

Dubbo学习

文章目录1.概念1.1 Dubbo特性1.2 设计架构2.快速开始2.1需求假设2.2.工程架构2.3 创建模块2.3.1 gmall-interface—公共接口层2.3.2 gmall-user—用户模块2.3.3 gmall-order-web—订单模块2.3.4 测试结果2.3.5 使用Dubbo改造2.3.6 注解版3.监控中心4.整合SpringBoot5.Dubbo配置…

高性能网络设计专栏-网络编程

以下是在零声教育的听课记录。 如有侵权&#xff0c;请联系我删除。 链接&#xff1a;零声教育官网 一、网络io与select&#xff0c;poll。epoll 网络IO &#xff0c;会涉及到两个系统对象 一个是 用户空间 调用 IO 的进程或者线程&#xff0c;另一个是 内核空间的 内核系统&a…

K_A11_007 基于STM32等单片机驱动K型热电偶( MAX6675) 串口与OLED0.96双显示

[TOC](K_A11_007 基于STM32等单片机驱动K型热电偶( MAX6675) 串口与OLED0.96双显示) 一、资源说明 单片机型号测试条件模块名称代码功能STC89C52RC晶振11.0592MK型热电偶( MAX6675) 模块STC89C52RC驱动K型热电偶( MAX6675)模块串口与OLED0.96双显示STM32F103C8T6晶振8M/系统时…

后端架构学习

心理预期 1. 什么是后端服务的架构&#xff1f;怎么去理解后端架构这个词&#xff1f; 学习架构的目的&#xff1a;可以更高效的解决复杂的业务问题和技术问题。对架构设计的一知半解会导致&#xff0c;设计不足或者多度设计的现象。架构师思考问题的角度 按出发点划分 从系统…

Linux虚拟机忘记密码

Linux虚拟机忘记密码 使用虚拟机过程中&#xff0c;我们有时会忘记root的登录密码&#xff0c;我们需要进入救援模式去命令passwd更改新的密码。 编辑模式(e) 在首页&#xff0c;按住e,进入编辑模式&#xff0c;找到LANGzh_CN.UTF-8&#xff0c;在末尾加上 init/bin/sh 挂载…

学长教你学C-day10-C语言数组

“同学们&#xff0c;我们前面讲过了变量和数据类型&#xff0c;我们来复习一下&#xff0c;用C语言变量存储数据1~10&#xff0c;然后再输出。小明小红你们上黑板来写&#xff0c;其他人写纸上就可以。” 小明和小红走向讲台拿起粉笔写下&#xff1a; 小红&#xff1a; #incl…

VS操作笔记1:添加项目与查看定义

1 在解决方案中添加项目 右击解决方案 点击“添加”——“新建项目”—— 创建新项目的方法与创建第一个时一样 创建之后&#xff0c;项目结构如下&#xff1a; 现在是两个项目&#xff0c;第一个c_test项目名称字体明显加粗&#xff0c;说明这是主项目&#xff0c;编译的时…

【Go基础】切片

切片 1. 切片的定义 切片&#xff08;slice&#xff09;是Golang中独有的数据类型。 数组有特定的用处&#xff0c;但是有不足之处 &#xff1a;运行时长度不可变。切片是随处可变的&#xff0c;它构建在数组之上&#xff0c;并且提供更强大的能力和便捷。 切片&#xff08…