当前位置: 首页 > 编程日记 > 正文

PAT Advanced Level 1010

1010 Radix (25)(25 分)

Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is "yes", if 6 is a decimal number and 110 is a binary number.

Now for any pair of positive integers N1 and N2, your task is to find the radix of one number while that of the other is given.

Input Specification:

Each input file contains one test case. Each case occupies a line which contains 4 positive integers:\ N1 N2 tag radix\ Here N1 and N2 each has no more than 10 digits. A digit is less than its radix and is chosen from the set {0-9, a-z} where 0-9 represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The last number "radix" is the radix of N1 if "tag" is 1, or of N2 if "tag" is 2.

Output Specification:

For each test case, print in one line the radix of the other number so that the equation N1 = N2 is true. If the equation is impossible, print "Impossible". If the solution is not unique, output the smallest possible radix.

Sample Input 1:

6 110 1 10

Sample Output 1:

2

Sample Input 2:

1 ab 1 2

Sample Output 2:

Impossible

/**********************
author: yomi
date: 18.6.8
现在来梳理思路:
1. 把已知进制的数转换为相应的已给的进制 (为什么要转呢?因为他给你的这个数并不一定是正确的表示,比如说
ab 二进制 , 那么就需要把ab先转到二进制)
2. 寻找未知进制数的进制,使他与前面的数相等--->进制数一定是从小到大遍历的,那么可以用到二分
然而还有一些小问题要去攻克:
1.二分上下界的确定:二分下界:进制必须能够表示这个数,所以该进制必须大于这个数中最大的那位数,故下界为:最大的那位数+1二分上界:分两种情况:一是已知数大于下界,那么上界为:已知数二是已知数小于下界,那么上界为:下界(容易想到的是上界为已知数,而由于上界不能小于下界,故此时上界与下界相等)这样就归结成了一个问题,为什么上界为已知数?需要指出的是 A digit is less than its radix and is chosen from the set {0-9, a-z} where 0-9represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. 只是说某一位数的进制为36,而我却以为我们要找的进制也在36进制以内,结果就WA了一半。实际上,题目并没有提上界,而当要找的进制数比已知数大的时候,这两个数就决不可能再相等了。所以将上界设置为已知数即可(一定是转换到已知进制数的已知数)。
看了大神的代码收获很多:
1. char it = *max_element(n.begin(), n.end());//查找最大元素的好办法整型数据只要在vector中就可以使用啦
2. 适当使用三目运算符确实能使代码简洁不少,这样有助于考场上分析。不管你们懂没懂,反正我懂了。
*********************分析为原创,代码部分原创 改编自柳婼******************/#include <iostream>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <cstdio>
using namespace std;
long long convert(string n, long long radix) {
    long long sum = 0;
    int index = 0, temp = 0;
    for(int i=0; i<n.length(); i++){
        temp = isdigit(n[i]) ? n[i]-'0' : n[i]-'a'+10;
        sum = sum*radix+temp;
    }
    return sum;
}

long long find_radix(string n, long long num) {char it = *max_element(n.begin(), n.end());//查找最大元素的好办法long long low = (isdigit(it) ? it - '0': it - 'a' + 10) + 1;long long high = max(num, low);while (low <= high) {long long mid = (low + high) / 2;long long t = convert(n, mid); /// n->mid->t n->mid->tif (t < 0 || t > num) high = mid - 1;///1010->10->1010 1010->2->10 故t>num时说明当前进制大 应该往左找 t<0是溢出的情况 else if (t == num) return mid; else low = mid + 1;}return -1; } int main() {string n1, n2;long long tag = 0, radix = 0, result_radix;cin >> n1 >> n2 >> tag >> radix;result_radix = tag == 1 ? find_radix(n2, convert(n1, radix)) : find_radix(n1, convert(n2, radix));if (result_radix != -1) {printf("%lld", result_radix);} else {printf("Impossible");}return 0; }/** 没用二分17分 一堆答案错误 因为我没考虑好radix的范围 #include <iostream> #include <string> #include <fstream> #include <cstdio> using namespace std;int pow(int a, int n) {int ans = 1;for(int i=0; i<n; i++){ans *= a;}return ans; } int main() {int tag, radix;string a,b;int flag = 1;int aa[20], bb[20];long long int n1 = 0, n2 = 0;int ans = 0;cin >> a >> b >> tag >> radix;int cnt1 = 0, cnt2 = 0;for(int i=0; i<a.length(); i++){if(a[i]>='0' && a[i]<='9'){aa[cnt1++] = a[i]-'0';}else if(a[i]>='a' && a[i]<='z'){aa[cnt1++] = a[i] - '0' - 39;}}for(int i=0; i<b.length(); i++){if(b[i]>='0' && b[i]<='9'){bb[cnt2++] = b[i]-'0';}else if(b[i]>='a' && b[i]<='z'){bb[cnt2++] = b[i] - '0'-39;}} // for(int i=0; i<cnt2; i++){ // cout << bb[i] << endl; // }if(tag == 1){//to find 2nd's radix// convert 1st and 2nd to decimalfor(int i=0; i<cnt1; i++){n1 += aa[i]*pow(radix, cnt1-i-1);}for(ans = 2; ans <=36; ans++){n2 = 0;for(int i=0; i<cnt2; i++){n2 += bb[i]*pow(ans, cnt2-i-1);}if(n2 == n1){flag = 0;break;}}}else if(tag == 2){//to find 1st's radix//convert 1st and 2nd to decimalfor(int i=0; i<cnt2; i++){n1 += bb[i]*pow(radix, cnt2-i-1);}for(ans = 2; ans <=36; ans++){n2 = 0;for(int i=0; i<cnt1; i++){n2 += aa[i]*pow(ans, cnt1-i-1);}if(n2 == n1){flag = 0;break;}}}if(flag == 0)cout << ans;elsecout << "Impossible";return 0; } **/ /** 6 110 2 2 21 ab 1 2 **/

转载于:https://www.cnblogs.com/AbsolutelyPerfect/p/9154834.html

相关文章:

4.0 C++远征:重载运算符

目录 重载运算符四、重载运算符1.一元运算符重载2.二元运算符重载重载运算符 四、重载运算符 ​ 概念 : 给原有运算符赋予新功能。 ​ 本质 : 函数重载。 ​ 关键字 : operator 1.一元运算符重载 ​ 符号只与一个操作数进行运算。 Ⅰ -&#xff08;负号&#xff09;的重载(取反…

django权限系统实现步骤_Django密码系统实现过程详解

一、Django密码存储和加密方式#算法迭代盐加密$$$默认加密方式配置#settings里的默认配置PASSWORD_HASHERS [django.contrib.auth.hashers.PBKDF2PasswordHasher,django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher,django.contrib.auth.hashers.Argon2PasswordHasher,dja…

比特币核心概念及算法

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 bitcoin项目地址位于github仓库&#xff0c;当前各种“币”&#xff0c;基本都是从抄写bitcoin代码开始起步的。想要深度研究&#xff0c;从看源码…

【php增删改查实例】第十七节 - 用户登录(1)

新建一个login文件&#xff0c;里面存放的就是用户登录的模块。 <html><head><meta charset"utf-8"><style type"text/css"></style><script type"text/javascript"></script></head><body&…

mysqlselectdb php_PHP MySQL Select(数据库查询)

SELECT 语句用于从数据库中选取数据。语法SELECT column_name(s) FROM table_name注释&#xff1a;SQL 语句对大小写不敏感。SELECT 与 select 等效。column_name(s)表示查询字段&#xff0c;可以是一个或多个&#xff0c;* 表示查询所有字段&#xff0c;table_name指数据表的名…

比特币和加密货币入门

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 比特币与加密货币 现在人们对加密货币空间产生巨大的兴趣的同时也同样也存在这疑惑与不解。比特币&#xff0c;加密货币&#xff0c;区块链&#…

有关RDS上只读实例延时分析-同适用于自建MySQL主从延时分析判断

个人不是很喜欢在技术上跟人互喷&#xff0c;尤其是不在同一个岗位上的人。一方面本人的性格如此&#xff0c;另一方面&#xff0c;我自身的口水也确实是不行&#xff0c;人生经历了第一次的双11洗礼&#xff0c;在大促的环境下&#xff0c;总算知道了有些东西是否应该规避&…

后盾网php多少钱_复合排水网价格多少钱

官方电话&#xff1a;【15266936188,0534-2138689】我公司专业生产防渗膜、土工膜、复合土工膜、土工布、隧道防水板、GCL钠基膨润土防水毯、聚酯长丝土工布等土工合成材料&#xff0c;价格合理、提供施工服务。一般情况下它不单独使用&#xff0c;因此在拉伸的过程中通常与成品…

Educational Codeforces Round 45 (Rated for Div. 2) D Graph And Its Complement(图的构造)

题意:构造一个图,使这个图的连通分量有a个,其补图的连通分量有b个,输出邻接矩阵 可以推出当min(a,b)!1时输出no ab1且n2或者n3时也为no 其余只要把一个连通分量里的x个点用x-1条边串起来就好了 哎,最后想到n3也为no,可惜了.. #include <bits/stdc.h> #define ll long…

一文读懂公有链、私有链、联盟链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链中公有链、私有链、联盟链都是区块链技术的一个细分&#xff0c;而技术仅仅是一种工具&#xff0c;怎么在不同的场景应用好不同的工具才是技…

近20个绚丽实用的jQuery/CSS3侧边栏菜单(转载)

http://developer.51cto.com/art/201510/493530.htm 近20个绚丽实用的jQuery/CSS3侧边栏菜单 jQuery作为一款主流的JavaScript前端开发框架&#xff0c;深受广告开发者的亲睐&#xff0c;同时jQuery有着不计其数的插件&#xff0c;特别是菜单插件更为丰 富&#xff0c;本文将要…

OpenJDK 编译-Linux环境

说明&#xff1a;笔者是在Ubuntu 16.04虚拟机中编译 OpenJDK 8 源码下载 http://download.java.net/openjdk/jdk8/ 推荐直接下载openjdk-8-src-b132-03_mar_2014.zip 环境准备&#xff1a; 安装bootstrap JDK&#xff0c;笔者安装的jdk7&#xff1b; 在环境变量PATH中添加jdk的…

linux 故障注入_阿里巴巴开源故障注入工具_chaosblade

chaosblade是阿里巴巴最近开源的一款故障注入的工具&#xff0c;因为我最近在做公司的虚拟化平台的可靠性测试工具&#xff0c;无意中发现这个工具&#xff0c;个人感觉比较有用&#xff0c;用起来也比较简单&#xff0c;所以拿出来分享一下&#xff0c;期望对大家的工作和学习…

带你了解“比特币黄金”和SegWit2x分叉

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 10月25日&#xff0c;比特币黄金从比特币中分离出来创造出一个基于ASIC挖矿的数字货币。几周之后&#xff0c;比特币公司中一个重要的集团想要根据…

HTML5-用canvas画布rotate字体旋转(中国象棋棋谱)。

一开始我们老师安排我做这个作业&#xff0c;在这个作业我遇到了一个很重大的问题就是&#xff0c;文字旋转这么旋转&#xff0c;我查了很多资料。 1发现绘画正方形&#xff0c;使他正方形中心原点旋转非常容易理解。&#xff08;我相信这个很多人看一下都会懂,&#xff09; 1.…

jQuery的deferred对象详解

阮一峰大神的关于jQuery的deferred对象详解 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html 转载于:https://www.cnblogs.com/qiufang/p/8886412.html

unity3d 切换网络_Unity3d新网络请求方式UnityWebRequest详解

Unity将要逐步放弃www网络请求api&#xff0c;新的api请求方式来临&#xff1a;UnityWebRequestThe&#xff0c;也正是本篇文章要给大家介绍的重点&#xff0c;那就是UnityWebRequestThe的使用详解。旧的 www &#xff1a;https://docs.unity3d.com/ScriptReference/WWW.html新…

PoW工作量证明

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 PoW是Proof of Work的缩写&#xff0c;即工作量证明的意思。在《拜占庭将军问题》中介绍过&#xff0c;比特币系统中引入了“工作量”的概念&#…

zookeeper 集群安装

一、ZooKeeper相关概念简介&#xff1a;ZooKeeper是一个开源的、分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服…

python queue 多进程_python中的Queue与多进程(multiprocessing)

最近接触一个项目&#xff0c;要在多个虚拟机中运行任务&#xff0c;参考别人之前项目的代码&#xff0c;采用了多进程来处理&#xff0c;于是上网查了查python中的多进程一、先说说Queue(队列对象)Queue是python中的标准库&#xff0c;可以直接import 引用&#xff0c;之前学习…

postman测试上传文件

输入url&#xff1a;http://127.0.0.1:8081/uploadfile 选择post方式 选择body 选择form-data&#xff0c;text改为file 输入key&#xff1a;file &#xff0c;value&#xff1a;选择文件 send即可 转载于:https://www.cnblogs.com/shimh/p/6094410.html

区块链资产安全攻略

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 本文从钱包、密码、软件、备份、交易所、习惯几个方面给出一些指引。 钱包 每个钱包在熟练使用之前&#xff0c;请用小额测试。 有条件购买硬件钱…

win10安装docker并结合Idea2018.1部署springboot项目

一、准备工作 1.、工具&#xff1a;win10&#xff0c;idea2018&#xff0c;maven3.5&#xff0c;jdk8 二、win10安装docker 1、win10安装docker&#xff1a;http://www.runoob.com/docker/windows-docker-install.html 2、安装完毕后&#xff0c;点击小鲸鱼&#xff0c;选择set…

在桌面右键菜单,停止工作,并提示“资源管理器停止工作”等情况。

在配置文件中&#xff0c;找到右键管理菜单&#xff0c;然后删除NvCp开头的扩展项有问题&#xff0c;去掉就完事了。转载于:https://www.cnblogs.com/wangfengderizi/p/6094446.html

ue4cmd怎么调用_[UE4,automation]UE4批渲染cmd篇

之前做项目的过程中&#xff0c;有一部分工作是在UE4里制作输出小短片。由于要完成的量比较大&#xff0c;所以研究了一些批渲染的方法。逻辑上跟以前在maya里用batch render差不多&#xff0c;不过UE4这边的设置相对繁琐一点点。本文讲解了在不打开UE4软件的前提下&#xff0c…

区块链将带来怎样的应用?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 在上一篇文章中&#xff0c;咱们聊到了区块链技术正在与大数据、云计算、物联网以及人工智能这些技术链接&#xff0c;随时可能碰撞出技术创新的火…

【Spark】Spark2.x版的新特性

一、API 1. 出现新的上下文接口&#xff1a;SparkSession&#xff0c;统一了SQLContext和HiveContext&#xff0c;并且为SparkSession开发了新的流式调用的configuration API 2. 统一了DataFrame和DataSet。DataFrame相当于DataSet[Row]&#xff0c;以及DataSet的增强聚合API 3…

python基础主要内容_python基础—python的介绍

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.这是因为计算机不能直接认识并…

Web Serveice服务代理类生成及编译

一、生成代理类 对于web service服务和wcf的webservice服务&#xff0c;我们都可以通过一个代理类来调用。 怎么写那个代理类呢&#xff1f;通过一个工具生成即可&#xff01;&#xff01;微软为我们提供了一个wsdl.exe的Web服务描述语言工具&#xff0c;wsdl.exe从 WSDL 协定文…

生成器/迭代器 和 函数的递归

生成器 一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值&#xff0c;但是yield又不同于return&#xff0c;return的执行意味着程序的结束&#xff0c;调用生成器函数不会得到返回的具体的值&#xff0c;而是得到一个可迭代的对象。每一次获取这个…