http://uoj.ac/problem/216

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

思路:我们用辗转相除法得到gcd(A,B),然后我们用A去减这个GCD,减出"二进制"数,然后就可以组成C了。

由于是log级别的,因此不会有超过400的方案。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<map>
#define ll long long
ll c[][],A,B,C,Gcd;
int tot;
ll read(){
ll t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
ll gcd(ll a,ll b){
if (b==) return a;
else return gcd(b,a%b);
}
bool superjudge(){
if (C>A) {puts("-1");return ;}
if (A==C||B==C){puts("");return ;}
ll Gcd=gcd(A,B);
if (C%Gcd!=){puts("-1");return ;}
return ;
}
void work(ll A,ll B,ll C){
ll t=(A-C)/B,i;
if (A==C) return;
c[++tot][]=A;c[tot][]=B;
for (i=;i*<=t;i*=){
c[++tot][]=A-i*B;c[tot][]=i*B;
c[++tot][]=A;c[tot][]=A-*i*B;
}
A-=B*i;
while (A>C){
if (A-i*B>=C){
c[++tot][]=A;
c[tot][]=i*B;
A-=i*B;
}
i/=;
}
}
void get_gcd(ll A,ll B){
if (A==Gcd||B==Gcd) return;
work(A,B,A%B);
get_gcd(B,A%B);
}
int main(){
A=read();B=read();C=read();
if (A<B)std::swap(A,B);
if (superjudge()) return ;
Gcd=gcd(A,B);
get_gcd(A,B);
work(A,Gcd,C);
printf("%d\n",tot);
for (int i=;i<=tot;i++)
for (i=;i<=tot;++i)
printf("%lld ",c[i][]),printf("%lld\n",c[i][]);
}

UOJ 216 Jakarta Skyscrapers的更多相关文章

  1. uoj #111. 【APIO2015】Jakarta Skyscrapers

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

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

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

  3. 【APIO2015】Jakarta Skyscrapers

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

  4. UNR #1 题解

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

  5. APIO2015泛做

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

  6. 虚拟机上装uoj

    前期准备: x64 ubuntu 镜像.vmware.ss账号 注意一定要有64位镜像! ss不是必须的,不过没有的话就等着下载一晚上吧... 首先先装好ubuntu,我装的是ubuntu-16.04 ...

  7. 【UOJ #35】后缀排序 后缀数组模板

    http://uoj.ac/problem/35 以前做后缀数组的题直接粘模板...现在重新写一下模板 注意用来基数排序的数组一定要开到N. #include<cstdio> #inclu ...

  8. Android Studio Error:CreateProcess error=216

    Error:CreateProcess error=216, This version of %1 is not compatible with the version of Windows you' ...

  9. 【UOJ #246】【UER #7】套路

    http://uoj.ac/contest/35/problem/246 神奇!我这辈子是想不出这样的算法了. 对区间长度分类讨论:题解很好的~ 我已经弱到爆了,看完题解后还想了一晚上. 题解中&qu ...

随机推荐

  1. 慕课python3.5学习笔记

    本文章中有部分代码为python2 慕课python入门 慕课python进阶 布尔值 布尔值可以用and.or和not运算. and运算是与运算,只有所有都为 True,and运算结果才是 True ...

  2. iOS开发zhiATM机的设计与实现

    // // main.m // ATM // #import <Foundation/Foundation.h> #import "ATM.h" #import &qu ...

  3. cocos2d-x3.0 Physics新的物理引擎

    1.说明: 3.0以后将box2d和chipmunk这两个物理引擎进行了封装,使用起来很的便利 2.详细用法: 1.创建物理世界场景 auto scene = Scene::createWithPhy ...

  4. Gson解析json数据(转)

    一. www.json.org这是JSON的官方网站. 首先,我,我们需要在code.google.com/p/google-gson/downloads/list下载JSON的jar包,解析后把gs ...

  5. Android(java)学习笔记223:上下文的区分

    1.两种上下文:  (1)Activity.this                               界面的上下文 (2)getApplicationContext()         整 ...

  6. poj 2679 Adventurous Driving(SPFA 负环)

    /* - - 这题做了一天.....粗心害死人啊 题目描述恶心 数据更恶心... 先处理一下能走的边 能走的点(到这建边从终点跑一下.) 然后就是SPFA了 注意负环的判断 */ #include&l ...

  7. Dij的堆优化

    #include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #i ...

  8. Sublime Text3使用详解

    Sublime Text简介 Sublime Text - 性感的代码编辑器.程序员之必备神器 Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text ...

  9. readonly 与 const

    readonly MSDN定义:readonly 关键字是可以在字段上使用的修饰符.当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数 ...

  10. Java编程思想-注解生成外部例子代码

    如果本文帮助到您,请点击下面的链接,这是本人的网站,以示鼓励,谢谢!链接绝对安全! 本人的网站 java注解属于java中高大上的功能,许多开源框架都使用了java注解的功能.比如spring,hib ...