印尼首都雅加达市有 $10^{18}$ 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 $1$ 到 $10^{18}$ 。除了这 $10^{18}$ 座摩天楼外,雅加达市没有其他摩天楼。

有 $10^{18}$ 只叫做 “doge” 的神秘生物在雅加达市居住,它们的编号依次是 $1$ 到 $10^{18}$。编号为 $i$ 的 doge 居住于编号为 $i$ 的摩天楼。每只 doge 都有一种神秘的力量,使它们能够不用跳跃就可以在摩天楼之间传递消息,如果编号为 $i$ 的 doge 和一个编号比他小的编号为 $j$ 的 doge 都知道了一个消息,它们可以使用神秘力量将消息传递给编号为 $i-j$ 的doge。

qmqmqm想知道它们是否掌握了这种力量。他将一条消息告诉了编号为 $a$ 的doge,又告诉了编号为 $b$ 的doge($a$ 可能和 $b$ 相等),让它们尽快传送给编号为 $c$ 的 doge。

请帮助 doge 们计算是否有方法使用不超过 $400$ 次力量将消息传递到 $c$ 号 doge ,或者告诉它们消息不可能在次数限制内传递到 $c$ 号 doge。

输入格式

输入包含一行三个正整数 $a,b,c$ 。

输出格式

如果不可能在次数限制内传递,输出一行一个整数 $-1$。

否则,第一行输出你进行操作的次数 $K$。之后 $K$ 行每行两个正整数表示你这次操作选择的 $i$ 和 $j$。

样例一

input

19 12 14

output

3
19 12
12 7
19 5

explanation

第一次操作前,知道消息的doge集合为 $\{19,12\}$。

第一次操作后,知道消息的doge集合为 $\{19,12,7\}$。

第二次操作后,知道消息的doge集合为 $\{19,12,7,5\}$。

第三次操作后,知道消息的doge集合为 $\{19,14,12,7,5\}$。此时符合条件了。

样例二

input

233 1 233

output

0

explanation

不需进行任何操作,就能使编号 $233$ 的doge知道消息。

样例三

input

4 2 1

output

-1

explanation

最初唯一的操作是选择 $i=4,j=2$,但这样会把消息传给编号为 $2$ 的doge,而它已经知道这个消息了,所以知道消息的doge集合没有变化,无法把消息告诉编号为 $1$ 的doge。

限制与约定

由于一些原因,本题使用捆绑测试。每个子任务有若干个测试点,分为 $5$ 个子任务,你只有通过一个子任务的所有测试点才能得到这个子任务的分数。

子任务 分值 限制
1 10 $a,b,c \leq 400$
2 20 $b=1$ 且 $a,c\leq 10^{18}$
3 20 $c=1$ 且 $a,b\leq 10^{18}$
4 20 $a,b,c \leq 10^9$
5 30 $a,b,c \leq 10^{18}$

时间限制:$1\texttt{s}$

空间限制:$256\texttt{MB}$

看一下 \(c\) 什么时候 不合法。

一种情况时 \(c>a\)

还有一种时 \(\gcd(a,b)\nmid c\)

然后一个一定合法的构造是用辗转相减法求出 \(\gcd(a,b)\),然后再用 \(a\) 不断减 \(\gcd(a,b)\) 弄出 \(c\)。

可以用倍增优化,如果我现在有一个 \(x\),那么可以得到 \(a-x\) 和 \(a-2x\),然后就能得到 \(2x\)。所以后面部分的复杂度是 \(O(\log a)\) 的。

前面的复杂度写出来是 \(\sum log(x/y)\),由于 \(\prod \lfloor\frac xy\rfloor\) 不超过 \(n\) ,所以前面那个是 \(O(log n)\) 级别的。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL a,b,c;
int m;
pair<LL,LL>p[405];
LL gcd(LL x,LL y)
{
if(x<y)
swap(x,y);
if(x%y==0)
return y;
// printf("hjh:%lld %lld\n",x,y);
p[++m]=make_pair(x,y);
for(LL i=1;i*y*2<x;i<<=1)
{
p[++m]=make_pair(x-i*y,i*y);
p[++m]=make_pair(x,x-2*i*y);
}
for(int i=0;i<=60;i++)
if((x/y)>>i&1)
p[++m]=make_pair(x,y<<i),x-=(y<<i);
return gcd(y,x);
}
int main()
{
scanf("%lld%lld%lld",&a,&b,&c);
if(a<b)
swap(a,b);
LL k=gcd(a,b);
if(c%k||c>a)
return puts("-1"),0;
if(a^k)
p[++m]=make_pair(a,k);
for(LL i=1;i*k*2<a;i<<=1)
{
p[++m]=make_pair(a-i*k,i*k);
p[++m]=make_pair(a,a-2*i*k);
}
for(int i=0;i<=60;i++)
if((a-c)/k>>i&1)
p[++m]=make_pair(a,k<<i),a-=k<<i;
printf("%d\n",m);
for(int i=1;i<=m;i++)
printf("%lld %lld\n",p[i].first,p[i].second);
}

[UOJ216][UNR#2 2A] Jakarta Skyscrapers的更多相关文章

  1. uoj #111. 【APIO2015】Jakarta Skyscrapers

    #111. [APIO2015]Jakarta Skyscrapers 印尼首都雅加达市有 NN 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 00 到 N−1N−1.除了这 NN 座摩 ...

  2. UOJ 216 Jakarta Skyscrapers

    http://uoj.ac/problem/216 题意:给定A,B,C,如果集合中有数i,j(i>j),那么集合就会增加i-j这个数,问有没有在初始集合为{A,B}400步内生成C的方案. 思 ...

  3. 【LOJ】#2887. 「APIO2015」雅加达的摩天楼 Jakarta Skyscrapers

    题解 事实上是个分块暴力 就是跳跃长度大于\(\sqrt{n}\)的狗最多有\(\sqrt{n}\)个位置 剩下跳跃长度小于\(\sqrt{n}\)的暴力记录 也就是两个\(dis\)数组 \(dis ...

  4. 【APIO2015】Jakarta Skyscrapers

    题目描述 印尼首都雅加达市有 $N$ 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 $0$ 到 $N − 1$.除了这 $N$ 座摩天楼外,雅加达市没有其他摩天楼. 有 $M$ 只叫做 ...

  5. UNR #1 题解

    A. 争夺圣杯 还是想说一下,这题是原题啊...想做的人可以戳codechef上的MTMXSUM(懒得贴链接了,套了个壳,不过正常人应该都能看得出来) 显然异或输出没什么奇怪的性质... 考虑一个元素 ...

  6. APIO2015泛做

    可以在UOJ上提交也可以在bzoj上提交(权限) A. Bali Sculptures 对于前72%的数据,按位考虑,然后跑一点沙茶dp就行了. dp:用f[x][y]表示前x位分为y段是否满足条件. ...

  7. 红米2A高配刷机记录

    2014816 机型:红米2A高配版 设备型号:2014816 CPU:高通 线刷:fastboot平台 http://192.168.7.118/MesReports/Reports/Cutting ...

  8. mac上执行sed的编辑 -i命令报错sed: 1: "test.txt": undefined label ‘est.txt’或sed: 1: "2a\test\": extra characters after \ at the end of a command

    问题一 sed编辑命令:[sed -i 's/a/b/g' test.txt]   报错:sed: 1: "test.txt": undefined label 'est.txt' ...

  9. 红米手机拍照效果测评(对比小米2A)

    小米相关的产品一向都很很受用户的欢迎,一个就是实惠,另一个就是配置还不错.近期小米推出的红米手机可谓是先声夺人,关注度异常火爆.今天刚抢的红米快递寄到了,来测试下红米手机的拍照表现,800万像素怎么样 ...

  10. ios8.3 编译 arm64版 openssl-1.0.2a

    xcode是6.3版的,ios sdk 是8.3的, 到http://www.openssl.org/source/下载最新版本openssl-1.0.2a 解压后用文本编辑器打开configure文 ...

随机推荐

  1. 深度学习(十二)——神经网络:搭建小实战和Sequential的使用

    一.torch.nn.Sequential代码栗子 官方文档:Sequential - PyTorch 2.0 documentation # Using Sequential to create a ...

  2. 【双系统】Win10/Win11 引导 Ubuntu

    目录 纲要 注意 写在最前 1. Win 分区 2. Ubuntu刻盘 3. 安装 Ubuntu 4. 配置引导 纲要 本文主要介绍了如何在已安装 Win10/Win11 前提下安装 Ubuntu 双 ...

  3. 《SQL与数据库基础》01. SQL概述 · 分类

    目录 SQL概述 SQL语法特征 SQL分类 本文以 MySQL 为例 SQL概述 SQL(Structured Query Language),结构化查询语言,用于访问和处理数据库的标准的计算机语言 ...

  4. VB快速上手文档教程

    前言 本来我想可能不会接触到这个语言, 不过在用excel时需要用到VBA. 这就不得不专门去学习一番. 入了个门, 专门写个文档留着. 万一以后用得到呢- 论VB, 我还是初学者. 如有弄错了的地方 ...

  5. WPF开发必备

    类库 1.XamlFlair The goal of the XamlFlair library is to ease the implementation of common animations ...

  6. 深挖 Python 元组 pt.1

    哈喽大家好,我是咸鱼 好久不见甚是想念,2023 年最后一次法定节假日已经结束了,不知道各位小伙伴是不是跟咸鱼一样今天就开始"搬砖"了呢? 我们知道元组(tuple)是 Pytho ...

  7. Angular2 通过自定义指令限制输入框输入类型

    ** 温馨提示:如需转载本文,请注明内容出处.** 本文链接:https://www.cnblogs.com/grom/p/16814577.html 在input控件中,使用type="n ...

  8. css 10-13

    1.背影样式 backgroud-color                   背景颜色 backgroud-color :red backgroud-image                 背 ...

  9. 15. 从零开始编写一个类nginx工具, 如果将nginx.conf转成yaml,toml,json会怎么样

    wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...

  10. 从零用VitePress搭建博客教程(3) - VitePress页脚、标题logo、最后更新时间等相关细节配置

    接上一节:从零用VitePress搭建博客教程(2) –VitePress默认首页和头部导航.左侧导航配置 五.默认主题相关细节配置 关于默认主题的标题,logo.页脚,最后更新时间等相关细节配置,我 ...