印尼首都雅加达市有 $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. 快手根据ID取商品详情 API 返回值说明

    ​ item_get-根据ID取商品详情 注册开通 ks.item_get 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secret St ...

  2. Solution -「SP 106」BINSTIRL

    Description Link. 求 \(\begin{Bmatrix}n \\ m\end{Bmatrix}\bmod2\) Solution 求 \[\begin{aligned} \begin ...

  3. tcpdump后台不间断抓包

    版本1的抓包命令 这两天排查一个小问题,需要在服务器上使用tcpdump24小时不间断抓包,这里简单记录下. 先看下tcpdump的语法: tcpdump [ -AbdDefhHIJKlLnNOpqS ...

  4. 全局重写Element UI中的Message消息提示显示时长

    需求:Message消息提示显示时长过长 环境:"vue": "2.6.12"."element-ui": "^2.15.6&qu ...

  5. Vue2系列(lqz)——Vue介绍

    文章目录 Vue入门 零:前端目前形势 前端的发展史 一:Vue介绍 和 基本使用 1.Vue介绍 渐进式框架 网站 2.Vue特点 易用 灵活 高效 3.M-V-VM思想 ① MVVM介绍 ② MV ...

  6. MySQL系列之——错误日志(log_error)、二进制日志(binary logs)、慢日志(slow_log)

    文章目录 1.错误日志(log_error) 1.1 作用 1.2 错误日志配置 1.3 日志内容查看 2. binlog(binary logs):二进制日志 ***** 2.1 作用 2.2 bi ...

  7. linux日常维护(二)

    linux启动流程 BIOS自检 启动GRUB 2 加载内核 执行systemd进程 初始化系统环境 执行/bin/login程序 (一)BIOS自检 加电POST自检(对硬件进行检测) 进行本地设备 ...

  8. How to Install Python on Linux

    Summary Hostmonster uses the preinstalled version of Python that ships with CentOS. Because of this ...

  9. CCF PTA编程培训师资认证

    考试费用: 双会员500元,任意一方单会员750元,报名考试同时成为CCF专业会员850元,非会员1000元. P/T2补考费用:双会员200元,任意一方单会员300元,非会员400元. T1补考费用 ...

  10. Jmeter-变量的嵌套使用

    场景: 有存在获取到多个登录账号,循环获取单个变量的情况. 常用方法: ${__BeanShell(vars.get("变量字段_${变量字段}"))} 取值示例: 思维扩展: 一 ...