【QED】kouki与阶乘之间的那些事?

文章目录

  • 题目
    • 题目描述
    • 输入输出格式
    • 数据范围
    • 测试样例
    • 样例说明
  • 思路
  • 代码
  • 复杂度分析
    • 时间复杂度
    • 空间复杂度

题目

题目链接🔗

题目描述

hhuggo \text{hhuggo} hhuggo kouki \text{kouki} kouki 的平板拿走了导致 kouki \text{kouki} kouki 不能打《Phigros》!他给了 kouki \text{kouki} kouki 一个整数 x x x 和一个整数数组 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an kouki \text{kouki} kouki 必须确定 a 1 ! + a 2 ! + . . . + a n ! a_1!+a_2!+...+a_n! a1!+a2!+...+an! 是否能被 x ! x! x! 整除,答对了才能拿回他的平板(绝对不是因为 hhuggo \text{hhuggo} hhuggo 写不出题目而不好意思去问 kiwi \text{kiwi} kiwi 于是转而婉转地去问 kouki \text{kouki} kouki)。

众所周知,这里的 k ! k! k! k k k 的阶乘,即所有小于或等于 k k k 的正整数的乘积。例如, 3 ! = 1 ⋅ 2 ⋅ 3 = 6 3! = 1 \cdot 2 \cdot 3 = 6 3!=123=6 , $5! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 = 120 $。

输入输出格式

【输入格式】

测试用例的第一行包含两个整数 n n n x x x

第二行包含 n n n 个整数 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an ,表示给定数组的元素。

【输出格式】

对于每个测试用例,输出一行。如果 a 1 ! + a 2 ! + . . . + a n ! a_1!+a_2!+...+a_n! a1!+a2!+...+an! 能被 x ! x! x! 整除,则打印 “YES”(不带引号),否则打印 “NO”(不带引号)。
注意答案输出的大小写问题,答案仅接受全大写的“YES"和“NO”

数据范围

1 ≤ n ≤ 5 × 1 0 5 1\le n\le 5 \times 10^5 1n5×105

1 ≤ x ≤ 5 × 1 0 5 1 \le x \le 5 \times 10^5 1x5×105

1 ≤ a i ≤ x 1 \le a_i \le x 1aix

测试样例

6 4
3 2 2 2 3 3
YES
10 5
4 3 2 1 4 3 2 4 3 4
NO

样例说明

在第一个样例中, 3 ! + 2 ! + 2 ! + 2 ! + 3 ! + 3 ! = 24 3!+2!+2!+2!+3!+3!=24 3!+2!+2!+2!+3!+3!=24,而且 4 ! = 24 4!=24 4!=24,所以输出 YES 。

思路

简明题意

给出一个长度为 n n n 的数组 a a a ,给出一个正整数 x x x ,保证数组 a a a 里面的元素都是正整数。问 a 1 ! + a 2 ! + a 3 ! . . . + a n ! a_1! + a_2! + a_3!... +a_n! a1!+a2!+a3!...+an! 是否能被 x ! x! x! 整除。

对于 1 < k < x 1<k<x 1<k<x,我们需要把 k ! k! k! ( k + 1 ) ! (k+1)! (k+1)! 合并,合并后可能会产生一些无法合并的余项。
这些余项最多是 ( x − 1 ) ∗ ( x − 1 ) ! + ( x − 2 ) ∗ ( x − 2 ) ! + . . . + 1 ∗ 1 ! (x-1)*(x -1)!+(x-2)*(x-2)!+...+1*1! (x1)(x1)!+(x2)(x2)!+...+11! x ! = ( x − 1 ) ∗ ( x − 1 ) ! + ( x − 2 ) ∗ ( x − 2 ) ! + . . . + 1 ∗ 1 ! + 1 x!=(x-1)*(x-1)!+(x-2)*(x-2)!+...+1*1!+1 x!=(x1)(x1)!+(x2)(x2)!+...+11!+1所以余项一定严格小于x!,所以只要有余项,就输出”NO”,否则就是YES”

代码

#include <iostream>
using namespace std;
const int N = 5e5 + 10;  // 数组大小int n, x, a, num[N];  // n为乘客数,x为判断的目标阶乘,num数组用于记录每个数出现的次数void solve() {cin >> n >> x;  // 输入数组大小n和目标阶乘x// 初始化num数组for (int i = 1; i <= n; i++) {cin >> a;  // 输入每个数组元素num[a]++;  // 记录该元素出现的次数}// 从1到x-1检查是否能合并至 x!for (int i = 1; i < x; i++) {num[i+1] += num[i] / (i + 1);  // 将i!合并到(i+1)!num[i] %= (i + 1);  // 计算当前余项if (num[i]) {  // 如果有余项,说明无法合并至x!cout << "NO\n";  // 输出 NOreturn;  // 结束当前测试用例}}// 如果没有余项,则可以被x!整除cout << "YES\n"; 
}int main() {int T = 1; while (T--) solve();return 0;
}

复杂度分析

时间复杂度

输入部分:读取每个测试用例的数据需要 O ( n ) O(n) O(n) 时间,最多有 n n n 个元素。
合并和检查部分:对于每个数组元素,我们最多执行 x x x 次合并操作,每次合并操作的复杂度为常数 O ( 1 ) O(1) O(1)
总体时间复杂度:由于每个测试用例的处理时间是 O ( n + x ) O(n + x) O(n+x),而根据题目中的数据范围,最大 n n n x x x 都为 5 × 1 0 5 5 \times 10^5 5×105,所以总的时间复杂度为 O ( n + x ) O(n + x) O(n+x),即 O ( 1 0 5 ) O(10^5) O(105),对于所有测试用例,时间复杂度为 O ( ∑ i = 1 ( n i + x i ) ) O(\sum_{i=1}(n_i+x_i)) O(i=1(ni+xi))

空间复杂度

我们使用了一个大小为 N N N 的数组 n u m [ ] num[] num[] 来记录每个元素的出现次数,大小为 O ( N ) O(N) O(N)
所以空间复杂度为 O ( N ) O(N) O(N),其中 N N N 为题目给定的最大值(在此问题中最大为 5 × 1 0 5 5 \times 10^5 5×105

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux基础I/O(1)】文件描述符的本质重定向的本质

目录 前言1. 理解C语言的文件接口2. 操作文件的系统调用接口2.1 open函数详解2.2 close函数详解2.3 write函数详解2.4 read函数详解 3. 文件描述符fd详解4. 文件描述符的内核本质5. 怎样理解Linux下一切皆文件?6. 理解输出输入重定向7. 重定向的系统调用8. 总结 前言 “在Lin…

C++:范围for

范围for&#xff08;range-based for&#xff09;是C的一种循环结构&#xff0c; 是在 C11 这个标准中引入的&#xff0c;这种类型的for循环使得遍历数组、容器中的元素更加简便和直观。 一、范围for语法 for ( 类型 变量名 : 数组名 ) 语句 //多条语句需要加⼤括号 示例&#…

C语言 递归编程练习

1.将参数字符串中的字符反向排列&#xff0c;不是逆序打印。 要求&#xff1a;不能使用C函数库中的字符串操作函数。 比如&#xff1a; char arr[] "abcdef"; 逆序之后数组的内容变成&#xff1a;fedcba 1.非函数实现&#xff08;循环&#xff09; 2.用递归方法…

Spring Boot - 日志功能深度解析与实践指南

文章目录 概述1. Spring Boot 日志功能概述2. 默认日志框架&#xff1a;LogbackLogback 的核心组件Logback 的配置文件 3. 日志级别及其配置配置日志级别3.1 配置文件3.2 环境变量3.3 命令行参数 4. 日志格式自定义自定义日志格式 5. 日志文件输出6. 日志归档与清理7. 自定义日…

USB子系统学习(一)USB电气信号

文章目录 1、声明2、USB协议概述3、USB电气信号3.1、USB基础概念3.1.1、低速/全速信号电平3.1.2、高速信号电平 3.2、学习目标3.3、设备断开与连接3.3.1、连接3.3.2、断开 3.4、复位3.5、设备速率识别3.5.1、低速/全速3.5.2、高速 3.6、数据信号3.6.1、低速/全速的SOP和EOP3.6.…

Android GameActivity(NativeActivity)读写文件

最近研究native android相关内容&#xff0c;其中最棘手的就是文件读写问题&#xff0c;最主要的是相关的文档很少。这里写下我所知道的方法。 由于本人使用的是Android14[arm64-v8a]版本的设备,能访问的路径相当有限&#xff0c;如果想要访问更多的路径&#xff0c;就不得不申…

安卓入门十一 常用网络协议四

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; MQTT是一种轻量级的、发布/订阅模式的消息传输协议。它被设计用于在低带宽或不稳定网络环境下&#xff0c;实现物联网设备之间的可靠通信。 4.1 MQTT详细介绍 发布/订阅模式&#xff1a;MQTT 使用发布/订…

气膜球幕:引领元宇宙时代的科技与艺术光影盛宴—轻空间

在科技与艺术交织的时代&#xff0c;未来的观影体验将不再受限于传统屏幕的束缚。随着气膜球幕的崭新亮相&#xff0c;突破性的光影效果和沉浸式体验让我们走进了一个全新的视听世界。这不仅仅是一个简单的球形影院&#xff0c;它是连接现实与虚拟、科技与艺术、光与影的桥梁&a…

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统&#xff1f; A hy…

kernel32.dll动态链接库报错要怎解决?详细解析kernel32.dll文件缺失解决方案

Kernel32.dll动态链接库报错详解与解决方案 在电脑的日常使用中&#xff0c;我们时常会遇到各种系统报错&#xff0c;其中kernel32.dll文件的报错尤为让人头疼。作为一名在软件开发领域摸爬滚打多年的从业者&#xff0c;我将为大家深入解析kernel32.dll文件的重要性&#xff0…

win10 npm login 登陆失败

npm login 命令总是登陆失败 提示我们设置带proxy。我们本地找到这个 找到代理地址 进行关键信息的设置 npm config set proxy http://xxxx:xxxx npm config set https-proxy http://xxx:xxx 设置完之后在执行npm login即可

[Qt] 输入控件 | Line | Text | Combo | Spin | Date | Dial | Slider

目录 输入类控件 1、Line Edit 录入个人信息 使用正则表达式验证输入框的数据 验证两次输入的密码一致 切换显示密码 2、Text Edit 获取多行输入框的内容 验证输入框的各种信号 3、Combo Box 使用下拉框模拟麦当劳点餐 从文件中加载下拉框的选项 4、Spin Box 调整…

SpringCloud源码-Ribbon

一、Spring定制化RestTemplate&#xff0c;预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…

基于单片机的数字电子秒表设计

此文章谨为课设记录 一、实验要求 题目六 数字电子时钟 基本要求&#xff1a; (1) 设计一个单片机电子时钟&#xff0c;设计的电子时钟通过数码管显示&#xff1b; (2) 具有能通过按键实现设置时间的功能&#xff1b; (3) 显示格式为小时十位、小时个位&#xff0c;分…

【业务场景】sql server从Windows迁移到Linux

目录 1.背景 2.Linux安装sql server 3.服务器不开端口的问题 4.数据库导入导出问题 1.背景 博主在24年年底接手运维了一个政府的老系统&#xff0c;整个应用和数据库单点部署在一台Windows Server服务器上&#xff0c;数据库选型是经典的老项目标配——sql server。随着近…

Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案

Flink CDC 自定义函数处理 SQLServer XML类型数据方案 1. 背景 因业务使用SQLServer数据库&#xff0c;CDC同步到doris 数仓。对于SQLServer xml类型&#xff0c;doris没有相应的字段对应&#xff0c; 可以使用json来存储xml数据。需要进行一步转换。从 flink 自定义函数入手…

Jdk动态代理源码缓存优化比较(JDK17比JDK8)

目录 JDK 8的缓存实现 JDK 17的缓存实现 优化比较 总结实际应用影响 JDK 8的缓存实现 // JDK 8 private static final WeakCache<ClassLoader, Class<?>[], Class<?>> proxyClassCache new WeakCache<>(new KeyFactory(), new ProxyClassFact…

《learn_the_architecture_-_aarch64_exception_model》学习笔记

1.当发生异常时&#xff0c;异常级别可以增加或保持不变&#xff0c;永远无法通过异常来转移到较低的权限级别。从异常返回时&#xff0c;异常级别可能会降低或保持不变&#xff0c;永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理&#xff0c;异常必须在比…

声音是如何产生的

一、音频概述 RTMP中一般音频采用aac编码&#xff0c;采样率为44100HZ, 每帧1024采样&#xff0c;帧率43&#xff0c;23.2ms一帧 RTC中一般音频采用opus编码&#xff0c;采样率为48000HZ&#xff0c;每帧480采样&#xff0c;帧率100&#xff0c;10ms一帧 通道数&#xff08;c…

Docker新手:在tencent云上实现Python服务打包到容器

1 使用docker的原因 一致性和可移植性&#xff1a;Docker 容器可以在任何支持 Docker 的环境中运行&#xff0c;无论是开发者的笔记本电脑、测试服务器还是生产环境。这确保了应用在不同环境中的行为一致&#xff0c;减少了“在我的机器上可以运行”的问题。 隔离性&#xff…