P16284 [蓝桥杯 2026 省 Python A 组] 音乐节拍器 题解

P16284 [蓝桥杯 2026 省 Python A 组] 音乐节拍器 题解 P16284 [蓝桥杯 2026 省 Python A 组] 音乐节拍器Link: https://www.luogu.com.cn/problem/P16284题目描述小明在学习音乐他发现不同乐器的演奏需要配合不同的节拍。现在有N NN种乐器每种乐器都有自己的“节拍周期”以秒为单位。在音乐演奏中如果某一时刻恰好是某个乐器节拍周期的整数倍那么这个乐器就会在这一时刻发声。例如一个节拍周期为3 33秒的乐器会在第3 33秒、第6 66秒、第9 99秒等时刻发声。小明想知道在前T TT秒内即第1 11秒至第T TT秒包含第T TT秒恰好有K KK种乐器同时发声的时刻有多少个输入格式第一行包含三个整数N , T , K N, T, KN,T,K分别表示乐器数量、观察的时长、同时发声的乐器数量。第二行包含N NN个整数p 1 , p 2 , … , p N p_1, p_2, \dots, p_Np1​,p2​,…,pN​表示每种乐器的节拍周期单位秒。输出格式一行输出一个整数表示恰好有K KK种乐器同时发声的时刻数量。输入输出样例 #1输入 #13 12 2 2 3 4输出 #13输入输出样例 #2输入 #24 20 3 2 3 5 6输出 #23输入输出样例 #3输入 #35 100 1 7 11 13 17 19输出 #336说明/提示【样例说明 1】乐器周期分别为2 22、3 33、4 44秒。在前12 1212秒内每个时刻发声情况如下表所示时刻乐器 1周期 2乐器 2周期 3乐器 3周期 4发声乐器数1---02✓--13-✓-14✓-✓25---06✓✓-27---08✓-✓29-✓-110✓--111---012✓✓✓3表中“✓”表示该乐器在该时刻发声“-”表示不发声。恰好2 22种乐器同时发声的时刻有t 4 , 6 , 8 t 4, 6, 8t4,6,8共3 33个。【样例说明 2】乐器周期分别为2 22、3 33、5 55、6 66秒。在前20 2020秒内恰好3 33种乐器同时发声的时刻如下表所示时刻乐器 1周期 2乐器 2周期 3乐器 3周期 5乐器 4周期 6发声乐器数6✓✓-✓312✓✓-✓318✓✓-✓3说明乐器1 11、2 22、4 44的最小公倍数为6 66所以在时刻6 , 12 , 18 6, 12, 186,12,18这三个乐器会同时发声。乐器3 33周期5 55在这些时刻不发声因此恰好3 33种乐器。【评测用例规模与约定】对于30 % 30\%30%的评测用例N ≤ 5 N \leq 5N≤5T ≤ 100 T \leq 100T≤100对于60 % 60\%60%的评测用例N ≤ 10 N \leq 10N≤10T ≤ 1000 T \leq 1000T≤1000对于所有评测用例1 ≤ N ≤ 20 1 \leq N \leq 201≤N≤201 ≤ T ≤ 10000 1 \leq T \leq 100001≤T≤100001 ≤ K ≤ N 1 \leq K \leq N1≤K≤N1 ≤ p i ≤ 100 1 \leq p_i \leq 1001≤pi​≤100。Solution1. 题意已知每种乐器的发声间隔求一段时间1 ∼ T 1\sim T1∼T内恰好有K KK种乐器发声的次数。2. 分析非常基础的模拟问题。对于每一个1 ∼ T 1\sim T1∼T的时刻t tt依次用每一个p i p_ipi​判断当前的t tt能否被其整除累加得到这个时刻同时发声的乐器数量判断是否等于K KK即可。重复T TT次就得到了1 ∼ T 1\sim T1∼T期间同时演奏的乐器数恰好等于K KK的次数。总体的时间复杂度是O ( N T ) O(NT)O(NT)。3. 代码usingSystem;classP16284{staticvoidMain(){varinputConsole.ReadLine()?.Split();if(inputnull||input.Length3)return;intNConvert.ToInt32(input[0]);intTConvert.ToInt32(input[1]);intKConvert.ToInt32(input[2]);varpInputConsole.ReadLine()?.Split();int[]pnewint[N];for(inti0;iN;i){p[i]Convert.ToInt32(pInput[i]);}intans0;for(intt1;tT;t){intcnt0;for(inti0;iN;i){if(t%p[i]0){cnt;}}if(cntK){ans;}}Console.WriteLine(ans);}}闲话输入的都是整数意味着所有的声音都要间隔至少 1 秒才能触发也就意味着本题的“音乐”的 BPM 最大只有 60。