蓝桥杯2025年第十六届省赛真题(更新中)
蓝桥杯2025年第十六届省赛真题1.可分解的正整数本题结论任何大于1的正整数都可表示为至少三个连续整数的和所以只需要判断A i AiAi是否大于1就可以C语言#includestdio.hintmain(){intN;scanf(%d,N);intx;inti;intcount0;for(i0;iN;i){scanf(%d,x);if(x1)count;}printf(%d,count);return0;}C#include iostream using namespace std; int main(){ int N; cin N; int x; int i; int count0; for(i0;iN;i){ cin x; if(x1) count; } cout count; return 0; }扩展有关“连续整数和”的完整定理假设连续整数序列从a aa开始长度为k kk( k ≥ 2 ) (k≥2)(k≥2)和为S SS根据等差数列求和公式S k × a k ( k 1 ) / 2 Sk×ak(k1)/2Sk×ak(k1)/2定理一从1开始的连续正整数的和S必须是三角数即S k × ( k 1 ) / 2 Sk×(k1)/2Sk×(k1)/2定理二至少两个连续正整数的和S不是2的幂定理三至少三个连续整数的和S是大于1的整数允许负数也是本题的情况如果感兴趣可以自己根据等差数列求和公式推导一下2.产值调整这道题直接模拟就可以但是有两个注意点需要用long long因为只要迭代几次三个数就会相等如果不加三数相等后跳出循环的条件就会因为k值过大而有一个测试点超时C语言#includestdio.hintmain(){intT;scanf(%d,T);while(T--){longlonga,b,c;intk;scanf(%lld %lld %lld %d,a,b,c,k);while(k--){longlonga1(bc)/2;longlongb1(ac)/2;longlongc1(ab)/2;aa1;bb1;cc1;if(abacbc)break;//这一步是必须的不然会有一个测试点超时}printf(%lld %lld %lld\n,a,b,c);}return0;}C#include iostream using namespace std; int main(){ int T; cin T; while(T--){ long long a,b,c; int k; cinabck; int i; while(k--){ long long a1(bc)/2; long long b1(ac)/2; long long c1(ab)/2; aa1; bb1; cc1; if(abacbc) break; } couta b cendl; } }3.画展布置如果序列单调递增L B M 2 − B 1 2 LB^2_M-B^2_1LBM2−B12此时L LL最小所以先将M幅画进行排序利用定长滑动窗口求最小值N中的哪M幅画L值最小排序用C的库函数sort关于定长滑动窗口的知识可以看我之前的博客【力扣】滑动窗口专题_力扣里面的滑动窗口-CSDN博客C#include bits/stdc.h using namespace std; int main(){ int N,M; cinNM; vectorlong long A(N); for(int i0;iN;i){ cinA[i]; } //特例只挑选一幅画作 if(M1){ cout0endl; return 0; } //排序 sort(A.begin(),A.end()); //定长滑动窗口标志变量 long long ansLLONG_MAX; for(int i0;iN-M;i){ long long diffA[iM-1]*A[iM-1]-A[i]*A[i]; if(diffans) ansdiff; } coutansendl; return 0; }感触竞赛场景下一般用万能头文件#include bits/stdc.h基本含括了常见的全部头文件还是多想着用long long吧4.水质检测本题思路是贪心扫描last记录上一个有检测器的列索引state记录上一个有检测器的行分布state 1: 第一行有检测器第二行没有。state 2: 第一行没有检测器第二行有。state 3: 两行都有检测器。思路当遍历到某一列i时如果该列有检测器且last不等于-1即之前已经遇到过有检测器的列那么当前列与上一有检测器的列之间可能存在一些全空白列即两行都是.。为了连通这两列必须在这些空白列中放置检测器而且只需要每空白列放一个沿同一行就能形成连续路径。因此需要添加的数量就是两列之间的间隔列数i - last - 1。填补空白后当前列与上一列在物理上相邻因为空白被填满但路径可能需要在不同行之间切换。state记录了上一列的行分布根据当前列的行分布判断是否需要额外添加一个检测器来实现换行如果当前只有上行上一列只有下行则需要在当前列再添加一个下行检测器使当前列变成双行代价1新状态为双行。如果当前只有下行上一列只有上行则需要在当前列添加一个上行检测器代价1新状态为双行。其他情况同行或上一列双行无需额外添加直接更新状态为当前列的行分布。#include bits/stdc.h //endl会强制刷新缓冲区 高频输出下速度会变慢\n只换行不刷新缓冲区 #define endl \n using namespace std; int ans, last -1, state; string a, b; int main(){ //C快速I/O的标配 注意不要scanf和cin混用 ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin a b; for (int i 0; i a.size(); i){ if (a[i] . b[i] .) continue; // 该列没有检测器 if (last ! -1) ans i - last - 1; // 添加检测器填补空白 if (a[i] # b[i] .){ // 第一行有第二行没有 if (state 2){ ans; state 3; } else state 1; } else if (a[i] . b[i] #){ // 第一行没有第二行有 if (state 1){ ans; state 3; } else state 2; } else state 3; // 都有检测器 last i; } cout ans endl; return 0; }感触C的万能头文件#include bits/stdc.hC快速I/O的标配ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);和endl换\n可以在开头写#define endl \n5.生产车间这是一道树上背包问题真题来源Dotcpp编程(C语言网)-编程入门学习-训练题库-实用的编程学练平台
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2417752.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!