裴蜀定理学习记录

news/2024/9/19 8:57:43/文章来源:https://www.cnblogs.com/liyishui2003/p/18326468

1477A - Nezzar and Board

观察到2x-y可以拆成x+(x-y),现在模拟一下这个过程

 

 发现得到的数可以看成从某个点xj出发,加上若干个两数之间的差的形式。

再考虑一下2x-y的几何意义,发现相当于在数轴上做x关于y的对称点,并且和数的分布位置有关,和具体数值是无关的

接下来有一个不太好想的key point:

设S为无限次操作后能得到的数的集合

如果存在0 ∈ S,那么如果x ∈ S,则 nx ∈ S     .........①

又因为可以平移,我们先让所有ai和k一起减去a[1](这里a[1]为a中其他值都一样,只是为了凑出0)

则得到 a1-a1( =0 ),a2-a1,a3-a1...... an-a1,令新得到的数组为a'。

现在问题变成从0出发,每次可以加任意两数的差的绝对值,问是否能得到k-a1。

如果直接暴力处理出所有两数的差,数量是O(n^2)的

但是发现做完差分( a2'-a1',a3'-a2',a4'-a3',a5'-a4' ...)之后,任意两数的差ai'-aj'都可以由(ai'-ai-1')+(ai-1'-ai-2')+...(aj+1'-aj')得到

中间那部分可以消掉,写成 ai'+(-ai-1'+ai-1')+(-ai-2'+ai-2')...(-aj+1'+aj+1')-aj'=ai'-aj'

这是i>j的情况,而i<j的情况可以直接乘个-1,依据是①

也就是我们用O(n)级别的两数差表达了O(n^2)的情况,根据裴蜀定理,问题转化成 k-a1 | gcd( a2'-a1',a3'-a2',a4'-a3',a5'-a4' ...)能否成立 

注:裴蜀定理指的是ax+by=k若有解要求k | gcd(a,b),可以推广到任意多项,证明见:裴蜀定理 - OI Wiki (oi-wiki.org)

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N = 2e5+5;
int a[N];
void solve(){int n,k;cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i];k-=a[1];for(int i=2;i<=n;i++) a[i]-=a[1];a[1]-=a[1];int g=0;for(int i=2;i<=n;i++){g=__gcd(g,abs(a[i]-a[i-1]));}if(k%g==0){cout<<"YES"<<"\n";}else cout<<"NO"<<"\n";
}
signed main(){int t;cin>>t;while(t--){//TODO
        solve();}
}

510D - Fox And Jumping

问题转化为挑出若干个li使得它们的值为gcd(根据裴蜀定理,它们可以线性组合出所有整数),且 Σci 最小

经典背包,dp[i][j] 表示当前考虑到第i个物品,选出来的 li 的gcd值为mp[j]的最小代价

n<=300,所以它们的gcd组合数目不会很多,但又可能很大,解决办法是开一个unordered_map存储,mp[i]表示第i个gcd的值

转移就是经典背包

 

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

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

相关文章

基于模糊PID的直流电机控制系统simulink建模与仿真

1.课题概述PID控制器和模糊PID控制器通过Simulink建模实现,在matlab中编程实现模糊控制规则,PID控制器参数计算。运行simulink模型之后,将2个控制器的控制响应曲线进行对比得到仿真结果。2.系统仿真结果 将PID控制器的控制响应曲线和模糊PID控制响应曲线放一起对比,结果如下…

公钥私钥gitee都不行,新手小白破局(windows凭据)

公钥私钥gitee都不行,新手小白破局(windows凭据) 创建时间:2024-07-26 一、问题复现 gitee项目创建后,由于之前的 账号密码错乱,导致提交不了,不能克隆下来,不能提交,如下: 1.1 初始的一个项目1.2 克隆出现问题二、删除公钥私钥 2.1 本机之前生成的密钥文件 一般在这…

【活动预告】Easysearch 结合大模型实现 RAG

2024 搜索客社区 Meetup 首期线上活动正式启动,本次活动由 搜索客社区、极限科技(INFINI Labs)联合举办,诚邀广大搜索技术开发者和爱好者参加交流学习。 活动时间:2024 年 7 月 31 日 19:30-20:30 (周三) 活动形式:微信视频号(极限实验室)直播 报名方式:关注或扫码海…

反射、特性

1.反射的例子:

SQL数据库表 多对多关系设计--省去链表的尝试

概述 之前遇到一个MES需求,需要创建一个基础资料表 "人员信息表" ,用于其它业务的人员信息关连,因为这些人员并非系统登录帐号,所以单独进行维护。人员表涉及到字段包括:ID,工号,姓名,所属工序,所属职称,所属车间。其中,所属工序、所属职称、所属车间 为…

Asp .Net Core 系列:详解授权以及实现角色、策略、自定义三种授权和自定义响应

什么是授权(Authorization)? 在 ASP.NET Core 中,授权(Authorization)是控制对应用资源的访问的过程。它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作。授权通常与身份验证(Authentication)一起使用,身份验证是验证用户身份的过程,授权与身份验证相互独…

CTF-内存取证题目

一:使用volatility2版本 1、分析镜像 python2 vol.py -f /home/kali/桌面/worldskills3.vmem imageinfo 2、从内存中获取到用户admin的密码并且破解密码,以flag{admin,password}形式提交(密码为6位) (1)查看系统用户 python2 vol.py -f /home/kali/桌面/worldskills3.vme…

后端说,单页面SPA和前端路由是怎么回事

没有请求的路由 在传统开发中,浏览器点击一个超链接,就会像后端web服务器发送一个html文档请求,然后页面刷新。但开始单页面开发后,就完全不同了。 单页面?这个概念难以理解。我用一个js作为整个web应用,然后再这个js中操作dom变化,以此来实现页面变化。这不叫单页面吗?…

nginx批量封禁黑名单ip

nginx批量封禁黑名单ip昨天搞到差不多1点,今天又是忙到6点半,连我领导都说“搞得我们加一好憔悴呀”。有很长一段时间没更新博客了,想着怎么做个人IP。。。谋出路一、需求介绍废话少说,需求就是怎么批量封禁别人给来的一大堆黑名单ip。甲方每天不定期发来几百、上千个ip,我…

【基础教程】Tutorial on Pytorch 结合官方基础文档和个人经验

参考与前言 此教程首次书写于2021年12月份 至 2022年4月份间不断补充;阅读本文时可以对着代码运行查看官方网址:https://pytorch.org/tutorials/ 【基本从这里翻译而来 更简洁版+碎碎念】 https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-begi…

kettle从入门到精通 第八十一课 ETL之kettle kettle中的json对象字段写入postgresql中的json字段正确姿势

1、上一节可讲解了如何将json数据写入pg数据库表中的json字段,虽然实现了效果,但若客户继续使用表输出步骤则仍然无法解决问题。 正确的的解决方式是设置数据库连接参数stringtype=unspecified 2、stringtype=unspecified 参数的作用: 当设置为 unspecified 时,pg JDBC 驱动…

C++文件系统操作6 - 跨平台实现文件和文件夹的拷贝

1. 关键词 2. fileutil.h 3. fileutil.cpp 4. filesystem_win.h 5. filesystem_win.cpp 6. filesystem_unix.cpp 7. 源码地址1. 关键词 C++ 文件系统操作 拷贝文件 拷贝文件夹 跨平台 2. fileutil.h#pragma once#include <string> #include <cstdio> #include <…