题意:

给出两个整数 a , b a,b a,b,每次可以选择如下一个操作进行:

(1)把 a , b a,b a,b都+1

(2)把 a , b a,b a,b都-1

(3)把 a , b a,b a,b都除以一个他们的公共质因子

问最小次数,使得 a , b a,b a,b至少存在一个等于1

Solution:

不妨令 a ≤ b a\leq b a≤b

假设某个时候,我们没有质因子可以除,那么我们需要利用 + 1 , − 1 +1,-1 +1,−1移动到一个有公共质因子的地方,然后再操作,如果到某个地方,两数存在有公共质因子,显然,他们的差 b − a b-a b−a一定是这个公共质因子的倍数,于是,他们的公共质因子一定是 b − a b-a b−a的任意一个公共质因子,那么唯一分解 b − a b-a b−a,对于每个 a , b a,b a,b,可以有这样的操作,一直-1到某个有公共质因子的地方,或者一直-1

到1,显然第二个的次数是 a − 1 a-1 a−1,而第一种,我们需要枚举 b − a b-a b−a的质因子 p p p,此时有两种决策,即把 a a a移至最接近的两个 p p p的倍数,即 p × ⌊ a p ⌋ p\times\lfloor\frac{a}{p}\rfloor p×⌊pa​⌋和 p × ⌈ a p ⌉ p\times \lceil\frac{a}{p}\rceil p×⌈pa​⌉,然后除 p p p,此时操作次数为 ∣ r e s − a ∣ + 1 |res-a|+1 ∣res−a∣+1, r e s res res是 a a a移动到的数值,每次枚举决策,记忆化搜索即可

训练的时候一直调不出来,原来是有一个函数写反参数,向上取整脑子短路写错了。。

#include<bits/stdc++.h>
using namespace std;using ll=long long;
#define div ttttttmp
const int N=200005,inf=0x3fffffff;
const long long INF=0x3f3f3f3f3f3f,mod=998244353;int prime[N],cnt;
bool isprime[N];void make_prime()
{memset(isprime,true,sizeof(isprime));for(int i=2;i<=100000;i++){if(isprime[i]) prime[++cnt]=i;for(int j=1;j<=cnt&&i*prime[j]<=100000;j++){isprime[i*prime[j]]=false;if(i%prime[j]==0) break;}}
}ll ceil(ll a,ll b){return a%b?a/b+1:a/b;}vector<ll>div;
map<pair<ll,ll>,ll>map1;ll dfs(ll x,ll del)
{if(x==1) return 0;if(map1.count({x,del})) return map1[{x,del}];ll min1=x-1;for(int i:div){if(del%i) continue;if(i*(x/i)) min1=min(min1,dfs(x/i,del/i)+x-(i*(x/i))+1);if(i*ceil(x,i)) min1=min(min1,dfs(ceil(x,i),del/i)+i*ceil(x,i)-x+1);}return map1[{x,del}]=min1;
}void work()
{ll a,b;scanf("%lld%lld",&a,&b);if(a>b) swap(a,b);map1.clear(); div.clear();ll tmp=b-a;for(int i=1;i<=cnt&&tmp>1;i++){if(tmp%prime[i]==0) div.push_back(prime[i]);while(tmp%prime[i]==0) tmp/=prime[i];}if(tmp>1) div.push_back(tmp);printf("%lld\n",dfs(a,b-a));
}int main()
{make_prime();int t; cin>>t;while(t--) work();return 0;
}

2021南京icpc J相关推荐

  1. 【Java/补题/牛客/ACM赛制】2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛(正式赛)

    文章目录 题目链接 知识一览 题目列表 快输 C - GCD(数论分块) 题目链接 2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛(正式赛) 知识一览 01-数论分块 题目列 ...

  2. 2021江西省icpc(A,B,D,F,G,H,J,K,L)

    K.Many Littles Make a Mickle(签到题) 任意门 先从最简单的签到题开始吧 #include<iostream> #include<cstdio> # ...

  3. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京)J Just Another Game of Stones ——线段树区间更新小于x的数

    This way 题意: 给你n个数,每次有两种操作: 1 l r v 表示a[i]=max(a[i],v)[l<=i<=r] 2 l r v 简单来说就是问你v和a[i](l<=i ...

  4. 2021下半年ICPC各类赛事时间日程

    ICPC预选赛 共2站 网络预选赛名额分配(可以关注微信公众号ICPCNews) 网络赛1:9.19 网络赛2:9.25 PS:网络赛没有牌子,决定后面赛站的学校名额分配. 现场赛1-50名2个,50 ...

  5. 2021上半年ICPC各类赛事时间日程

    ICPC区域赛 截止今日最新经确认的比赛时间更新如下: 昆明(昆明理工大学,线上赛) 2021年4月02-03 银川(宁夏理工学院,现场赛) 2021年5月15-16 沈阳(东北大学,现场赛) 202 ...

  6. 南京理工大学计算机考研大纲,2021南京理工大学考研大纲参考书目

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源:http://fangcai.100xuexi.com/Ebook/DigitalLibrary/BookNew.aspx?BookName=%u5 ...

  7. 南农计算机考研真题,2021南京农业大学考研历年真题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源:http://fangcai.100xuexi.com/Ebook/DigitalLibrary/BookNew.aspx?BookName=%u5 ...

  8. 南京邮电大学计算机学硕2021,南京邮电大学2021年硕士研究生拟录取名单

    2021考研复试工作,已经大部分招生单位进入了尾声.目前有些学校公示出研究生拟录取名单.因此,参加完2021考研复试考生们,一定及时关注目标学校公告.下面,小编为大家给出--南京邮电大学2021年硕士 ...

  9. 2021南京航天航空大学820自动控制原理参考答案

    一.(来源自动控制原理学习辅导知识精粹习题详解考研真题--孙优贤)(式2-53中C2C_2C2​改为C1C_1C1​) 二. 1. 设PDPDPD控制器的传递函数 Gc(s)=Kp(1+τs)G_{c ...

最新文章

  1. 取文字_有内涵的男孩名字:用三字经为宝宝取一个独特稀少有内涵的好名
  2. 画世界怎么用光影_【干货】详解光影的魅力及其绘画技巧,一起打造极致炫丽的光影世界吧!...
  3. java 线程休眠_百战程序员:java线程的休眠和回复
  4. Web前端技术分享:img标签与background插入图片的区别
  5. Python基础——PyCharm版本——第二章、数据类型和变量(超详细)
  6. css3蒙版运动,纯CSS3制作逼真的汽车运动动画
  7. 分享自己针对Automation做的两个成熟的框架(QTP 和Selenium)
  8. linux终端命令行用户名和密码,Linux入门篇 —— Linux 用户与组管理详解(system-config-users 命令行)| 七日打卡...
  9. 学习笔记:聚类算法Kmeans/K-均值算法
  10. udp测试工具linux系统,网络测试工具下载_Packet Sender(UDP/TCP网络测试工具)
  11. matlab 矩阵逻辑与,MATLAB矩阵的寻访与赋值
  12. android 如何把.swf作为开机动画,win10系统将PPT幻灯片转为SWF动画的操作方法
  13. 美区苹果id关闭双重认证_双重认证
  14. 怎么给图片加边框线?图片加边框的方法
  15. 人体动作捕捉与SMPL模型 (mocap and SMPL model)
  16. 工具类记录之Guawa的Splitter
  17. 我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下: 1、 长度13位; 2、 以86的国家码打头; 3、 手机号码的每一位都是数字。
  18. subplot中的图例
  19. 隧道安全管理八大系统
  20. Third1: Basic Web applications BASIC NFS services triggering mount | Cloud computing

热门文章

  1. php shell地址,运用Shell 命令行获得本机IP地址
  2. ES6对象的扩展运算符
  3. 摩托车电动车头盔新标准GB811-2022?将于2023年7月1日强制实施!
  4. python中map,join,int结合在一起的用法
  5. Linux挂载ntfs格式的U盘
  6. 图解机器学习中的张量
  7. catia73631234567890
  8. Resume/CV中的CV是什么意思?
  9. Bootstrap—标签label和徽章badge
  10. SpringBoot实现自动化装配解析