Transformation HDU - 6726(百度之星复赛2019 dfs)
给你一个二元组(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)相关推荐
- 2019 百度之星复赛 补题
A - Diversity HDU - 6725 (树形dp) 若两个区间有交,显然可以把两个区间的值,都取在区间交集的端点的其中一个, 若没有交集的话,[l1,r1]<[l2,r2]时,取到r ...
- 2016百度之星复赛 1003 拍照 优先队列
2016"百度之星" - 复赛(Astar Round3) Ended 2016-05-29 14:00:00 - 2016-05-29 17:00:00 Current Tim ...
- 2016百度之星复赛 1003 拍照 扫描线
原题见1003 有n条船平行于x轴,已知初始时刻的位置,向平行于x轴正向或反向走.所有船速度大小一致.现在海哥站在x轴上,要给船拍照,角度为朝向+y方向的固定90度,可以在任意时刻.任意位置拍,问何时 ...
- 2017百度之星 复赛
作为一只菜鸡,这可能是我OI生涯中最后一次打百度之星了,希望明年这个时候能不退役(虽然不大可能) 开始贴题解吧.会持续更新. 1001 Arithmetic of Bomb 煞笔模拟题,1A #inc ...
- HDU - 6383 百度之星2018初赛B 1004 p1m2(二分答案)
p1m2 Accepts: 1003 Submissions: 4595 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072 ...
- 2017百度之星复赛:1003. Pokémon GO(递推)
Pokémon GO Accepts: 738 Submissions: 1725 Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 3 ...
- 2017百度之星复赛:1006. Valley Numer(数位DP)
Valley Numer Accepts: 548 Submissions: 1125 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- 2017 百度之星 复赛 Valley Numer(数位dp)
Valley Numer 数位dp,state标志前面若干位是否存在递增序列. 代码: #include <bits/stdc++.h> using namespace std;typed ...
- HDU6411 带劲的and和(2018百度之星复赛,并查集,位运算,思路)
Problem Description 度度熊专门研究过"动态传递闭包问题",他有一万种让大家爆蛋的方法:但此刻,他只想出一道简简单单的题--至繁,归于至简. 度度熊有一张n个点m ...
最新文章
- 5.对象和面向对象3——类的定义
- c++ 获取数据类型最大值或最小值
- 4月1日,正式对全球科学界开放!
- vSphere 故障排错:针对 Virtual Machine 的故障排查
- 算法竞赛输入输出!!!
- 建议让游客参与修长城
- unordered_map 简介
- 解决Deepin开机锁屏状态下能够使用触控板而解锁之后无法使用触控板的BUG
- avr单片机动态数码管c语言,AVR单片机8位数码管显示的程序实现(两种方法介绍)...
- PHP动态网站开发期末试卷,《PHP动态网站开发实例教程》课程考核方案
- LWC 71: 780. Reaching Points
- 产品经理-自然资源行业4大产品线整理
- 乳腺仿体breast phantom的MATLAB实现及探讨
- 无压低温烧结银:SiC芯片封装的关键材料
- 交换机组播风暴_用思科交换机杜绝局域网广播风暴
- 涨姿势:在线黑科技小工具,方便快捷
- 德国十大电商都有谁?
- 办公图片素材站PPT模板简历模板下载站源码+WAP手机端+整站数据
- Linux九阴真经之九阴白骨爪残卷13(LVM的备份还原,恢复最新状态)
- Win10 无法访问打印机扫描的共享文件
热门文章
- codeigniter mysql error_CodeIgniter:无法使用提供的设置错误消息连接到数据库服务器...
- 基于深度学习的视频预测研究综述
- np合并 python_这15个tips,带你领略 Python 的简洁和优雅
- git怎么读_【杂谈】怎么使用有三AI完成系统性学习并赚钱
- 编写程序判断两个数组是否相等,然后编写一段类似的程序比较两个 vector。
- 利用Qt元对象技术防止工厂模式下代码臃肿问题,QT 动态创建对象(第2种方法)
- Linux加法简单程序,Android应用程序的开发目录——简单的加法计算示例
- django from组件 实现增加 删除 编辑(推荐用法)
- cocos2d-x编程之CCScale9Sprite典型用法
- 第九章 Libgdx内存管理