SGU 126. Boxes

2023-11-21 09:20
文章标签 126 boxes sgu

本文主要是介绍SGU 126. Boxes,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题面Codeforces. Programming competitions and contests, programming communityhttps://codeforces.com/problemsets/acmsguru/problem/99999/126大意:给出A,B(0<A+B<2^31),每次操作可以将其中一个数减去另一个数,并让另一个数乘2,即(A,B)->(2A,B-A),前提是B>=A

问最终使得A,B有一个为0的最少操作数,或判定无解

由于2A,B-A这个形式非常像辗转相减法中(A,B)->(A,B-A),只是A变成2A了,于是我们考虑一次操作后这个2A对gcd的影响,由于gcd(A,B)=gcd(A,B-A),所以gcd(2A,B-A)只能是gcd(A,B)或 2gcd(A,B)并且我们知道最终态为(A+B,0),gcd为A+B

于是可以判断有解的充要条件为:A+B=2^kgcd(A,,B) k为自然数

那么,判断有解后如何求出操作数呢?其实,操作数就为k,下面我们来证明这一点

首先,设d=gcd(A, B),则A=xd,B=yd,其中gcd(x, y)=1(为了方便,我们令x<=y)

代入A+B=2^kgcd(A,,B),得到xd+yd=2^k d,即x+y=2^k

若k=0,则x,y中一个为0,一个为1,即A,B中有一个为0,显然操作数为k=0

若k>0,则2^k为偶数,x,y奇偶性相同,可以证明x和y都是奇数(若都是偶数则不互质)

操作后变为(2xd,(y-x)d),其中2x,y-x都为偶数,则gcd必然变为原来的两倍,即2d

由A+B=2^k d可知,k次操作后即到达目标态,得证

具体实现非常简单

这篇关于SGU 126. Boxes的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401398

相关文章

【机器学习300问】126、词嵌入(Word Embedding)是什么意思?

人类的文字,作为一种高度抽象化的符号系统,承载着丰富而复杂的信息。为了让电脑也能像人类一样理解并处理这些文字,科学家们不断探索各种方法,以期将人类的语言转化为计算机能够理解的格式。 一、One-Hot编码的不足         在自然语言处理发展的早期,给文字进行编码是处理文本数据的主要手段。其中,One-Hot编码是一种简单直观的方法,它将每个单词或字符映射为一个独特的二进制

UVA 103--- Stacking Boxes

这道题在小白书中的分类是动态规划,把题AC了之后在网上看解题报告后,多数解法也是DAG上的动态规划。但其实一个简单的深度优先就能解决问题了。首先将每数从大到小排序,再将各组按照排序后的第一个数字的大小进行从大到小排序。需要注意的是,记录各组数据的编号也要和数进行同步的排序。 #include <iostream>#include <cstdio>#include <vect

SGU 495. Kids and Prizes 期望

n个盒子 m个人轮流选 拿走盒子里的奖品 盒子再放回去 求得到奖品的期望 可以求没有被选到的奖品的期望 用n减去就是答案 #include <stdio.h>#include <iostream>#include <algorithm>#include <math.h>using namespace std;int main(){int n,m;while(scanf("%d%

SGU 108. Self-numbers 2 离线+位优化

可以像筛选法那样标记 但是内存最多只能开1024的int数组 我用了位优化 用一个int 32 位标记32个数字 接下来就离线 排个序 算出第k大的哪个数 #include <cstdio>#include <cstring>#include <algorithm>using namespace std;int a[10000000/32];struct node{int x, y,

SGU 106. The equation 扩展欧几里德

求解的个数 对应ax+by=c 根据裴蜀定理c%gcd(a, b) == 0有解 假设d = gcd(a, b) 用扩展欧几里德求出方程aax+bb*y=cc 的解x0 y0 那么原方程的一个解就是x0*c/d和y0*c/d 通解为  x = x0+i*b/d y = y0+i*a/d 分别讲x1 x2 带入得到i 满足最小的左区间 y1 y2一样 #include <cstd

SGU 103. Traffic Lights 带限制最短路

每个点有2中颜色 只有一条路上的两个点颜色一样才能通过这条路 最短路加上等待的时间处理 处理的是参考别人的 唉还是太弱了 #include <cstdio>#include <cstring>#include <vector>#include <queue>#include <algorithm>using namespace std;int s, e;int n, m;in

UVA12657 Boxes in a Line【双向链表】【数组模拟】

You have n boxes in a line on the table numbered 1 . . . n from left to right. Your task is to simulate 4 kinds of commands: • 1 X Y : move box X to the left to Y (ignore this if X is already

LeetCode题练习与总结:单词接龙Ⅱ--126

一、题目描述 按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -> s2 -> ... -> sk 这样的单词序列,并满足: 每对相邻的单词之间仅有单个字母不同。转换过程中的每个单词 si(1 <= i <= k)必须是字典 wordList 中的单词。注意,beginWord 不必

UVA - 103 Stacking Boxes

题意:n维向量,如果向量A,B每一位上的数A都比B大,则A可以嵌套住B,求最大的嵌套个数,并输出依次是第几个。 思路:构成一个有向图DAG,如果X可以嵌套在Y里,那么X到Y就有一个有向边,最后就是求DAG上的最长路径 #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using names