Technocup 2017 - Elimination Round 1: Transformation: from A to B
来源:互联网 发布:python pyqt 实例 编辑:程序博客网 时间:2024/05/09 19:05
让自己处于好心情,世界因此而变
原题链接
Vasily has a number a, which he wants to turn into a number b. For this purpose, he can do two types of operations:
multiply the current number by 2 (that is, replace the number x by 2·x);
append the digit 1 to the right of current number (that is, replace the number x by 10·x + 1).
You need to help Vasily to transform the number a into the number b using only the operations described above, or find that it is impossible.
Note that in this task you are not required to minimize the number of operations. It suffices to find any way to transform a into b.
Input
The first line contains two positive integers a and b (1 ≤ a < b ≤ 109) — the number which Vasily has and the number he wants to have.
Output
If there is no way to get b from a, print “NO” (without quotes).
Otherwise print three lines. On the first line print “YES” (without quotes). The second line should contain single integer k — the length of the transformation sequence. On the third line print the sequence of transformations x1, x2, …, xk, where:
x1 should be equal to a,xk should be equal to b,xi should be obtained from xi - 1 using any of two described operations (1 < i ≤ k).
If there are multiple answers, print any of them.
You need to help Vasily to transform the number a into the number b using only the operations described above, or find that it is impossible.
Note that in this task you are not required to minimize the number of operations. It suffices to find any way to transform a into b.
题意理解
一开始队友说可以暴力递归,我多想了会,看见两种数字增大的方法只有两个结果,一个是奇数,一个是偶数,那么倒着想就ok了。
以下AC代码
/* * from A to B.cpp * * Created on: Oct 26, 2016 * Author: chan */#include<cstdio>#include<iostream>using namespace std;int main(){ int a,b; int data[100],cnt; while(cin>>a>>b){ if(a==b){ cout<<"NO\n"; } else{ cnt=0; data[cnt++]=b; while(b>a){ if(b%2==0) b/=2; else b=(b-1)/10; data[cnt++]=b; } if(b==a&&(data[cnt-1]*2==data[cnt-2]|| data[cnt-1]*10+1==data[cnt-2])){ cout<<"YES\n"; cout<<cnt<<endl; for(int i=cnt-1;i>=0;i--) cout<<data[i]<<" "; cout<<endl; } else cout<<"NO\n"; } }}
脚注
在test5 wa了多次,原因是在进行除法操作时有误差
样例:
(15-1)/10=1
1×10+1=11
11和15不相等
- Technocup 2017 - Elimination Round 1: Transformation: from A to B
- [codeforces Technocup 2017 727A]Transformation: from A to B
- Technocup 2017 - Elimination Round 1 A题
- Technocup 2017 - Elimination Round 1
- Technocup 2017 - Elimination Round 1 C 交互
- Technocup 2017 - Elimination Round 1 D 贪心
- codeforces Transformation: from A to B (水题)
- CF--Technocup 2017 - Elimination Round 2(ABCDE)
- Technocup 2017 — Elimination Round 2 (and Codeforces Round 380) Editorial B. Spotlights
- Codeforces Round #380 (Div. 2,Based on Technocup 2017 - Elimination Round 2)C - Road to Cine//
- Codeforces Round #434 (Div. 1, based on Technocup 2018 Elimination Round 1) A-C题解
- 【35.56%】【727A】Transformation: from A to B
- 【codeforces 727A】Transformation: from A to B 题解
- codeforces A. Transformation: from A to B(水题)
- CodeForces 727A Transformation: from A to B 暴力
- Codeforces Round #380 (Div. 2, Rated, Based on Technocup 2017 – Elimination Round 2) A. Interview wi
- codeforces Transformation: from A to B dfs+bfs
- Transformation: from A to B 暴力加dfs
- 二层交换机、三层交换机、路由器
- Linux文件压缩和归档
- 约瑟夫环问题
- Yii框架进行多条件查询,并分页
- codevs 1519 过路费(最小生成树+LCA)
- Technocup 2017 - Elimination Round 1: Transformation: from A to B
- zigbee协议栈学习(三)
- 工厂模式
- 继承
- HDU 4604 (树状数组)
- JavaWeb中的路径问题
- Java基本知识笔记
- Hadoop2.7.3+Hive2.1.0整合实现wordcount程序
- Java的接口与Scala的trait特质