HDU-1111解题报告
一个蒟蒻的吐槽:
我英语不是很好,经常遭到读题杀,但这种一路看下去几乎每个单词都懂却仍一脸懵逼的题目还是比较少见,虽然我英语烂,但它的写法也要背锅!!!(B^n直接写成Bn真的好码?)
题目大意:
给定一个复数X的实部xr和虚部xi,求将其转为B进制后上的每一位数。B为一个复数,X和B的实部和虚部都为整数。要求转为B进制后每一位数都是整数。最后结果至多100位,超过一百位可视为无解。
思路:
假如X能被分解,那么肯定是分解为以下形式
X = a0 + a1*B^1 +a2*B^2 +…+an*B^n = a0 + B( a1 + B(a2 + B(… B*an )));
那么我们只需要从a0开始DFS,若X-a0 后得到的复数可被B整除则说明a0可能为解的一元。因为易知“+”之后的部分实部和虚部都是整数,不可能使除以B后得到的复数的实部或虚部出现小数。除了这个剪枝还要注意a的取值范围是一定要求小于|B|的,然后用这两个剪枝,就可以较轻松的搜索下去了。
关于复数相除后实部、虚部是否为整数的判断:详细的我也不说了,这个百度、谷歌到处都是,学过的也能很快明白,我就直接列出式子满足不想细学又要做这道题的人。
若复数A = a + b * i; B = c + d * i; (i为虚数单位)
A可被B整除等价于 (a*c+b*d)%(c*c+d*d)==0 && (b*c-a*d)%(c*c+d*d)==0
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>const int MAXN = 128;long long a,b,c,d,mod,t,flag,num,i;
long long ans[MAXN];void Dfs(long long a, long long b, long long step)
{if (step > 100) return;if (a==0 && b==0){flag = 1;num = step;return;}long long x,y,i;for (i=(int)sqrt(mod-1); i>=0; --i){x = (a-i)*c+b*d;y = b*c-(a-i)*d;ans[step] = i;if ( x%mod==0 && y%mod==0 )Dfs(x/mod,y/mod,step+1);if (flag) return;}
}int main()
{for (scanf("%I64d",&t); t>0; --t){scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&d);flag = 0;mod = c*c +d*d;Dfs(a,b,0);if (flag==0) printf("The code cannot be decrypted.\n");else{if (num == 0) printf("0\n");for (i=num-1; i>=0; --i)if (i!=0) printf("%I64d,",ans[i]);else printf("%I64d\n",ans[i]);}}return 0;
}
几个坑。。。。
- 这里要用__int64或long long,int不够大。
- 若输入数据的xr和xi都为0,不注意很可能会导致没有输出。
- 这题似乎根本没有spj,搜索时要将a从小到大枚举。
- 是的,对于下面这组数据答案为无解(不要问我为什么。。。。。)
1
0 1 0 1
HDU-1111 原题请戳这里
HDU-1111解题报告相关推荐
- hdu 2058 解题报告 - The sum problem
hdu 2058 解题报告 - The sum problem 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2058 等差求和公式: Sn=(a1+aN ...
- BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5087 题目意思:找出第二个最长递增子序列,输出长度.就是说,假如序列为 1 1 2,第二长递增子序列是 ...
- BestCoder4 1002 Miaomiao's Geometry (hdu 4932) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 题目意思:给出 n 个点你,需要找出最长的线段来覆盖所有的点.这个最长线段需要满足两个条件:(1 ...
- BestCoder15 1002.Instruction(hdu 5083) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5083 题目意思:如果给出 instruction 就需要输出对应的 16-bit binary cod ...
- HDU 1506 解题报告 Largest Rectangle in a Histogram (单调栈)
看题传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题意比较明显,就是找以某一个矩形为高的最大的矩形.这个题可以用单调栈来求解,需要注意的是如果从 ...
- BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908 题目意思:给出 一个从1~N 的排列你和指定这个排列中的一个中位数m,从这个排列中找出长度为奇数 ...
- Fibonacci Tree HDU - 4786——解题报告
立志用更少的代码做更高效的表达 Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do some ...
- hdu 1754 解题报告 I Hate It
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1870解题报告(愚人节的礼物)
愚人节的礼物 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %I64d , %I64u Java class ...
- hdu 2049 不容易系列之(4)——考新郎 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2049 写这篇解题报告时 我真的很气愤 对自己又一次犯下低级错误改了两个小时 int型的数据居然用%I6 ...
最新文章
- VS2008中Web Reference和Service Reference的区别
- cblas_saxpy catlas_sset
- Nodejs内存控制详解(上篇)
- java邮箱正则表达式_Java正则表达式详解
- 一连三问 !!! 什么是内存对齐?内存对齐的原因是什么?内存对齐的好处是什么?
- 英特尔第十代处理器为什么不支持win7_为什么7代CPU不支持WIN7操作系统?
- 惠普179fnw打印机使用说明_惠普179fnw驱动下载
- 百度贴吧客户端(Android)网络通信行为分析
- java数组= 0_JAVA数组
- 全网首发 nuScenes数据集(百度网盘 + 迅雷网盘) + 下载方法
- 计算机,软件工程类毕业论文选题要求
- as 怎么将多个cpp文件代码编译成so_一段C代码,是如何编译运行的?
- vmstat 命令参数详解
- 学习tensorflow之mac上安装tensorflow
- 腾讯云服务器PAI项目管理,腾讯云——PAI节点创建教程
- ben we_老WE成立手游战队!2020LOL冬季转会汇总:TSM蛇蛇
- SonarQube 9.x集成阿里p3c代码规范检测java代码;
- Android Studio-Create New Virture Divice-System Image
- Android APK打包加固 以及上传审核流程和APP上线10多家开发者平台地址
- python flask高并发_标志处理高并发性,Flask
热门文章
- java树结构_Java数据结构:树(Tree)
- XENOGEARS,延续万年的的永恒之爱(引)
- Android 使用 okhttp3和retrofit2 进行单文件和多文件上传
- EasyUi 快速入门
- python经典程序练习题6:健康食谱的输出。列出5种不同的食材,输出两两之间可能的组合形式
- post请求路径出错NET:ERR_CONNECTION_RESET
- 肝完《浏览器基本原理与实践》的精华分享
- signature=c0ffabca9db77bd424cc24014d68327f,交易加速
- STM32----FLASH和EEPROM的区别
- 达梦数据库报错“[警告]Error Code:-70037,字符串不完整”