当前位置: 首页 > news >正文

cf919Div2C题题目总结

Problem - C - Codeforces

这道题其实是一道数学题。

先看第一个变量,也就是我们要求的答案k的数量,但看k是很好确定它的限制条件的,要想均匀分成k份,n%k必须为0,有了k,我们再来看m,对于a(1)和a(k+1),要使它们除以m后相同,肯定满足一下式子a(1)=x1*m1+n1,a(k+1)=y1*m1+n1对于其它的对应的a也是一样的,a(2)=x2*m2+n2,a(k+2)=y2*m2+n2……,那么只要知道m1是否等于m2就可以了吧,如果m1等于m2就说明m存在,在有n1和n2的阻碍下,显然算不出m,不妨将两者相减a(1)-a(k+1)=(x1-y1)*m1,a(2)-a(k+2)=(x2-y2)*m2,,这个时候求一个m,不就是求两式的最大公因数吗,为什么是最大公因数,因为题中m有限制m要求大于等于2,它们的公因数可能有很多个,但是大于2的不一定有,所以求一个最大公因数,看看是否大于2。那么解法显而易见了,枚举k,然后求每个子数组对应元素差的最大公因数,看它是否大于等于2,及不等于1,如果是ans++。


using i64 = long long;
i64 gcd(i64 a, i64 b) {while (b) {i64 temp = b;b=a%b;a = temp;}return std::abs(a);
}
void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; i++) {std::cin >> a[i];}int ans = 0;for (int k = 1; k <= n; k++) {if (n % k == 0) {int g = 0;for (int i = k; i < n; i++) {g = gcd(g, a[i] - a[i - k]);}ans += (g != 1);}}std::cout << ans << "\n";
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;while (t--) {solve();}return 0;
}

http://www.lryc.cn/news/280512.html

相关文章:

  • Pandas实战100例 | 案例 4: 数据选择和索引 - 选择特定的列和行
  • Netty-Netty实现自己的通信框架
  • 【算法刷题】总结规律 算法题目第2讲 [234] 回文链表,因为深浅拷贝引出的bug
  • RabbitMQ如何保证消息不丢失?
  • Random的使用
  • 通过反射修改MultipartFile类文件名
  • Macos下修改Python版本
  • 多种采购方式下,数智化招标采购系统建设解决方案
  • Java选择排序
  • [足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-1 坐标系与概念基准
  • 【金猿人物展】DataPipelineCEO陈诚:赋能数据应用,发挥未来生产力
  • 4D 毫米波雷达:智驾普及的新路径(二)
  • element plus自定义组件表单校验
  • C //练习 4-13 编写一个递归版本的reverse(s)函数,以将字符串s倒置。
  • DNS解析和主从复制
  • 光猫(无限路由器)插入可移动硬盘搭建简易版的NAS
  • SpringIOC之support模块GenericGroovyApplicationContext
  • Awesome 3D Gaussian Splatting Resources
  • 【镜像压缩】linux 上 SD/TF 卡镜像文件压缩到实际大小的简单方法(树莓派、nvidia jetson)
  • Zookeeper 和 naocs的区别
  • 2-6基础算法-快速幂/倍增/构造
  • 行业内参~移动广告行业大盘趋势-2023年12月
  • 【笔记】书生·浦语大模型实战营——第四课(XTuner 大模型单卡低成本微调实战)
  • 开源的Immich自建一个堪比 iCloud 的私有云相册和备份服务
  • SPI通信讲解
  • 本地一键部署grafana+prometheus
  • NIO核心依赖多路复用小记
  • 如何彻底卸载 Microsoft Edge?
  • JavaScript-对象-笔记
  • java 运算符 选择语句