news 2026/5/30 17:48:58

GESP认证C++编程真题解析 | P10724 [GESP202406 七级] 区间乘积

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP认证C++编程真题解析 | P10724 [GESP202406 七级] 区间乘积

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目来源】

洛谷:[P10724 GESP202406 七级] 区间乘积 - 洛谷

【题目描述】

小杨有一个包含n nn个正整数的序列A = [ a 1 , a 2 , … , a n ] A=[a_1,a_2,\dots,a_n]A=[a1,a2,,an]

小杨想知道有多少对< l , r > ( 1 ≤ l ≤ r ≤ n ) <l,r>(1\le l\le r\le n)<l,r>(1lrn)满足a l × a l + 1 × ⋯ × a r a_l\times a_{l+1}\times \dots \times a_ral×al+1××ar为完全平方数。

一个正整数x xx为完全平方数当且仅当存在一个正整数y yy使得x = y × y x=y\times yx=y×y

【输入】

第一行包含一个正整数n nn,代表正整数个数。

第二行包含n nn个正整数a 1 , a 2 , … , a n a_1,a_2,\dots,a_na1,a2,,an,代表序列A AA

【输出】

输出一个整数,代表满足要求的< l , r > <l,r><l,r>数量。

【输入样例】

5 3 2 4 3 2

【输出样例】

2

【算法标签】

《洛谷 P10724 区间乘积》 #数论# #前缀和# #位运算# #GESP# #2024#

【代码详解】

// 40分#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong// 定义int为long long类型intn,ans;// n: 数组长度, ans: 答案inta[100005][12];// a[i][0]存储原数,a[i][1..11]存储质因数分解结果intb[12]={0,0,2,3,5,7,11,13,17,19,23,29};// 前11个质数(从索引1开始)// 计算第k个数的质因数分解,并累加到前缀和中voidcalc(intk){intx=a[k][0];// 获取第k个数的原始值// 将前一个数的质因数分解结果复制到当前数for(inti=1;i<=11;i++){a[k][i]=a[k-1][i];}// 特殊处理x=1的情况if(x==1){a[k][1]+=2;// 1的特殊处理,将质数2的指数加2}// 对x进行质因数分解for(inti=2;i<=11;i++){// 不断除以质数b[i],直到不能整除为止while(x%b[i]==0){x/=b[i];// 除以质因数a[k][i]++;// 对应质因数的指数加1}}}signedmain()// 由于#define int long long,所以用signed main{cin>>n;// 输入数组长度// 读取n个数并计算每个数的质因数分解前缀和for(inti=1;i<=n;i++){cin>>a[i][0];// 将输入的数存储在a[i][0]calc(i);// 计算第i个数的质因数分解}// 统计满足条件的子数组数量for(inti=1;i<=n;i++)// 子数组的右端点{for(intj=0;j<=i;j++)// 子数组的左端点-1(j=0表示从开始){intf=0,s=0;// f: 是否不满足条件标志, s: 总指数和// 检查子数组a[j+1..i]是否满足条件for(intk=1;k<=11;k++){// 计算子数组中第k个质因数的总指数s+=a[i][k]-a[j][k];// 检查这个质因数的指数是否为奇数if((a[i][k]-a[j][k])%2){f=1;// 存在指数为奇数的质因数break;}}// 如果所有质因数的指数都是偶数,且总指数和不为0if(!f&&s){ans++;// 计数加1}}}cout<<ans<<endl;// 输出结果return0;}
// 100分#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong// 将int定义为long long类型intn,x,y,ans;// n: 数字个数, x: 前缀异或和, y: 临时变量, ans: 答案inta[1<<11]={1};// a[state]: 状态为state的前缀数量,初始a[0]=1intb[11]={0,2,3,5,7,11,13,17,19,23,29};// 前10个质数(索引1-10)// 计算函数:返回y的质因数分解状态的二进制表示intcalc(){if(y==1)// 如果y等于1,返回0{return0;}ints=0;// 状态值,用二进制表示// 遍历前10个质数for(inti=1;i<=10;i++){intt=0,c=0;// t: 当前质数的状态位, c: 当前质数的指数计数// 对y进行质因数分解while(y%b[i]==0){y/=b[i];// 除以质因数c++;// 指数加1// 关键:只关心指数的奇偶性// 如果c是奇数,设置对应的状态位if(c%2){t=1<<i;// 第i位设为1}else{t=0;// 第i位设为0}}s+=t;// 累加状态}returns;// 返回状态值}signedmain()// 由于使用了#define int long long,所以main要改为signed{// 输入数字个数cin>>n;// 处理n个数字for(inti=1;i<=n;i++){// 输入当前数字cin>>y;// 计算:y = 输入的数字 ⊕ calc()的返回值// 注意:这里y既用作输入,又在calc()中被修改y=x^calc();// x是之前的前缀异或和// 统计答案:当前状态y出现的次数ans+=a[y]++;// 加上之前出现过的次数,然后计数加1// 更新前缀异或和x=y;}// 输出结果cout<<ans<<endl;return0;}

【运行结果】

5 3 2 4 3 2 2
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 10:07:19

AI图像生成终极指南:从零开始的快速创作方案

想要体验AI图像生成的魅力&#xff0c;却担心技术门槛太高&#xff1f;Qwen Image Edit-Rapid-AIO作为一款开源AI图像生成工具&#xff0c;专为新手和普通用户设计&#xff0c;提供从文本到图像的极速创作体验。本指南将带你轻松上手&#xff0c;实现创意到作品的快速转化。 【…

作者头像 李华
网站建设 2026/5/30 11:26:23

VRCX:彻底改变你的VRChat社交体验,告别管理烦恼的智能助手

VRCX&#xff1a;彻底改变你的VRChat社交体验&#xff0c;告别管理烦恼的智能助手 【免费下载链接】VRCX Friendship management tool for VRChat 项目地址: https://gitcode.com/GitHub_Trending/vr/VRCX 你是否曾在VRChat中遇到过这些困扰&#xff1f;&#x1f62b; 好…

作者头像 李华
网站建设 2026/5/24 13:57:31

Python Fitparse完全指南:高效解析Garmin运动数据

Python Fitparse是一个专门用于解析ANT/Garmin设备生成的FIT文件的开源库。FIT文件是运动追踪设备中存储训练数据的标准二进制格式&#xff0c;包含了从基础运动信息到详细生理指标的全方位数据。这个库为开发者和数据分析师提供了简单而强大的工具&#xff0c;帮助他们从复杂的…

作者头像 李华
网站建设 2026/5/20 17:37:23

使用hardfault_handler检测未对齐内存访问的操作指南

一次HardFault&#xff0c;揪出代码里深藏的未对齐访问陷阱你有没有遇到过这样的情况&#xff1a;程序跑得好好的&#xff0c;突然“死机”&#xff0c;没有打印、无法复现&#xff0c;调试器一接上去就停在HardFault_Handler&#xff1f;别急着重启或换板子。这可能不是硬件问…

作者头像 李华
网站建设 2026/5/30 9:43:20

构建现代化软件无线电工作环境的完整指南

构建现代化软件无线电工作环境的完整指南 【免费下载链接】radioconda Software radio distribution and installer for conda 项目地址: https://gitcode.com/gh_mirrors/ra/radioconda 在当今快速发展的无线通信领域&#xff0c;软件定义无线电技术正以前所未有的速度…

作者头像 李华
网站建设 2026/5/23 21:41:00

一文说清Keil代码提示如何提升工业代码质量

如何用好Keil代码提示&#xff0c;让工业级嵌入式代码“少出错、易维护”在工厂的自动化产线上&#xff0c;一个PLC控制器突然宕机&#xff0c;排查数小时后发现&#xff1a;问题竟源于一行拼错了结构体成员名的代码——motor.spped_rmp 1000;。这种低级错误&#xff0c;在现代…

作者头像 李华