印尼首都雅加达市有 $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. next.js 源码解析 - getStaticProps、getStaticPaths 篇

    好久前写了关于 getStaticProps 和 getStaticPaths 的内容,然而半年过去了源码解析就一直忘记了,不久前有人提醒才想起来,补下坑. 本文主要是解读下 getStaticPro ...

  2. 基于Supabase开发公众号接口

    在<开源BaaS平台Supabase介绍>一文中我们对什么是BaaS以及一个优秀的BaaS平台--Supabase做了一些介绍.在这之后,出于探究的目的,我利用一些空闲时间基于Micros ...

  3. Avalonia 实现聊天消息渲染、图文混排(支持Windows、Linux、信创国产OS)

       在实现即时通讯软件或聊天软件时,渲染文字表情.图文混排是一项非常繁琐的工作,再加上还要支持GIF动图.引用消息.撤回消息.名片等不同样式的消息渲染时,就更加麻烦了. 好在我们可以使用 ESFra ...

  4. 解密Prompt系列14. LLM Agent之搜索应用设计:WebGPT & WebGLM & WebCPM

    前两章,我们分别介绍了基于微调和prompt的工具调用方案,核心都是如何让大模型和工具进行交互,包括生成工具调用语句和处理工具调用请求.不过在实际应用中,想要设计一个可以落地的LLM Agent,需要 ...

  5. Fabric 2.x 智能合约开发记录

    表象:Return schema invalid. required items must be unique [recovered] 虽然 Fabric v2.2 已经发布了很久了,但之前因为项目历 ...

  6. 使用MySQL存储过程提高数据库效率和可维护性

    MySQL 存储过程是一种强大的数据库功能,它允许你在数据库中存储和执行一组SQL语句,类似于编程中的函数.存储过程可以大幅提高数据库的性能.安全性和可维护性.本文将详细介绍MySQL存储过程的使用. ...

  7. 基于间隔密度的概念漂移检测算法mdm-DDM

    概念漂移 ​ 概念漂移是数据流挖掘领域中一个重要的研究点.传统的机器学习算法在操作时通常假设数据是静态的,其数据分布不会随着时间发生变化.然而对于真实的数据流来说,由于数据流天生的时间性,到达的数据的 ...

  8. linux安装clickhouse

    linux安装clickhouse 1. 系统要求 ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运 ...

  9. Host-Only模式下虚拟机无法联网问题

    环境: 镜像:Linux CentOS7 \-----------------------------------------\ 问题描述: 虚拟设置了Host-Only模式的虚拟网卡VMNet4,并 ...

  10. 《美英报刊阅读教程(中级精选本)(第五版)》 ISBN: 9787301306864

    作者: 端木义万 著 出版社:  北京大学出版社 出版时间:  2019-09 版次:  7 ISBN:  9787301306864 定价:  69.00 装帧:  平装 开本:  16开 纸张:  ...