给你一个二元组(a,b)(a,b),支持AB两种操作,分别是将其变成(a,2b−a)(a,2b−a)和(2a−b,b)(2a−b,b)。问能否通过大于等于零次操作将其变成(c,d)。
Input
第一行一个正整数T(T≤8×104)表示数据组数。

接下来TT行,每行44个整数a,b,c,d(−1018≤a,b,c,d≤1018)。
Output
对于每组数据,如果有解,首先输出一行Yes,然后输出一行由ABAB构成的字符串,表示一系列操作。如果有多解,输出长度最短的解,如果有多个长度最短的解,输出字典序最小的。如果无解,输出No。
Sample Input
3
0 1 2 3
0 1 0 1
0 1 -1 3
Sample Output
No
Yes

Yes
BA
挺巧妙的一种方法,一开始顺着来bfs结果超内存了。
如果逆着来算的话,(a,2*b-a)->(x,y)->(x,(x+y)/2),那么(x+y)一定是偶数,并且x和y是不断收敛的。那么max(x,y)>max(a,b),min(x,y)<min(a,b)。这样去剪枝,就能过了。不过时间复杂度还是很大。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;ll a,b,c,d;
string ss;inline void dfs(ll x,ll y,string s)
{if(x==a&&y==b){string sss="";for(int i=s.length()-1;i>=0;i--) sss+=s[i];//倒着来的话,那么字符串也是倒着的,需要翻转一下。ss=min(ss,sss);return ;}if((x+y)&1||max(x,y)<max(a,b)||min(x,y)>min(a,b)) return ;//剪枝dfs(x,(x+y)/2,s+"A");dfs((x+y)/2,y,s+"B");
}
int main()
{int t;scanf("%d",&t);while(t--){scanf("%lld%lld%lld%lld",&a,&b,&c,&d);ss="V";dfs(c,d,"");if(ss=="V") printf("No\n");else printf("Yes\n"),cout<<ss<<endl;}return 0;
}

努力加油a啊,(o)/~

Transformation HDU - 6726(百度之星复赛2019 dfs)相关推荐

  1. 2019 百度之星复赛 补题

    A - Diversity HDU - 6725 (树形dp) 若两个区间有交,显然可以把两个区间的值,都取在区间交集的端点的其中一个, 若没有交集的话,[l1,r1]<[l2,r2]时,取到r ...

  2. 2016百度之星复赛 1003 拍照 优先队列

    2016"百度之星" - 复赛(Astar Round3) Ended  2016-05-29 14:00:00 - 2016-05-29 17:00:00 Current Tim ...

  3. 2016百度之星复赛 1003 拍照 扫描线

    原题见1003 有n条船平行于x轴,已知初始时刻的位置,向平行于x轴正向或反向走.所有船速度大小一致.现在海哥站在x轴上,要给船拍照,角度为朝向+y方向的固定90度,可以在任意时刻.任意位置拍,问何时 ...

  4. 2017百度之星 复赛

    作为一只菜鸡,这可能是我OI生涯中最后一次打百度之星了,希望明年这个时候能不退役(虽然不大可能) 开始贴题解吧.会持续更新. 1001 Arithmetic of Bomb 煞笔模拟题,1A #inc ...

  5. HDU - 6383 百度之星2018初赛B 1004 p1m2(二分答案)

    p1m2  Accepts: 1003  Submissions: 4595  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 131072 ...

  6. 2017百度之星复赛:1003. Pokémon GO(递推)

    Pokémon GO  Accepts: 738  Submissions: 1725  Time Limit: 3000/1500 MS (Java/Others)  Memory Limit: 3 ...

  7. 2017百度之星复赛:1006. Valley Numer(数位DP)

    Valley Numer  Accepts: 548  Submissions: 1125  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  8. 2017 百度之星 复赛 Valley Numer(数位dp)

    Valley Numer 数位dp,state标志前面若干位是否存在递增序列. 代码: #include <bits/stdc++.h> using namespace std;typed ...

  9. HDU6411 带劲的and和(2018百度之星复赛,并查集,位运算,思路)

    Problem Description 度度熊专门研究过"动态传递闭包问题",他有一万种让大家爆蛋的方法:但此刻,他只想出一道简简单单的题--至繁,归于至简. 度度熊有一张n个点m ...

最新文章

  1. 5.对象和面向对象3——类的定义
  2. c++ 获取数据类型最大值或最小值
  3. 4月1日,正式对全球科学界开放!
  4. vSphere 故障排错:针对 Virtual Machine 的故障排查
  5. 算法竞赛输入输出!!!
  6. 建议让游客参与修长城
  7. unordered_map 简介
  8. 解决Deepin开机锁屏状态下能够使用触控板而解锁之后无法使用触控板的BUG
  9. avr单片机动态数码管c语言,AVR单片机8位数码管显示的程序实现(两种方法介绍)...
  10. PHP动态网站开发期末试卷,《PHP动态网站开发实例教程》课程考核方案
  11. LWC 71: 780. Reaching Points
  12. 产品经理-自然资源行业4大产品线整理
  13. 乳腺仿体breast phantom的MATLAB实现及探讨
  14. 无压低温烧结银:SiC芯片封装的关键材料
  15. 交换机组播风暴_用思科交换机杜绝局域网广播风暴
  16. 涨姿势:在线黑科技小工具,方便快捷
  17. 德国十大电商都有谁?
  18. 办公图片素材站PPT模板简历模板下载站源码+WAP手机端+整站数据
  19. Linux九阴真经之九阴白骨爪残卷13(LVM的备份还原,恢复最新状态)
  20. Win10 无法访问打印机扫描的共享文件

热门文章

  1. codeigniter mysql error_CodeIgniter:无法使用提供的设置错误消息连接到数据库服务器...
  2. 基于深度学习的视频预测研究综述
  3. np合并 python_这15个tips,带你领略 Python 的简洁和优雅
  4. git怎么读_【杂谈】怎么使用有三AI完成系统性学习并赚钱
  5. 编写程序判断两个数组是否相等,然后编写一段类似的程序比较两个 vector。
  6. 利用Qt元对象技术防止工厂模式下代码臃肿问题,QT 动态创建对象(第2种方法)
  7. Linux加法简单程序,Android应用程序的开发目录——简单的加法计算示例
  8. django from组件 实现增加 删除 编辑(推荐用法)
  9. cocos2d-x编程之CCScale9Sprite典型用法
  10. 第九章 Libgdx内存管理