题目链接在这里

这题和虫食算比较类似。做完这道题可以去做虫食算。都是搜索一类的题。

这样  我们分析题目可以发现进制只可能是字母的个数,也就是n-1。为什么?

因为题目要求完整的加法表才算数。如果进制低于n-1,字母就多了;如果进制高,字母就不够,凑不出一个完整的加法表。所以这题第二问比第一问简单很多。

再说第一问。可以使用搜索,dfs参数是已经搜的字符个数,如果等于n-1判断是否合法,合法就可以输出答案退出程序,不合法就继续搜。在dfs的时候可以枚举有哪些字符是没用过的,再枚举哪些数字是没用过的,一一对应。数据范围很小,可以轻松搞定。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<map>
using namespace std;
int Map[2000],jd[2000];
int n;
char s[200];
char mp[100][100][20];
char que[100];
bool vis[100];bool Check(){for(int i=1;i<=n;++i){for(int j=1;j<=n;++j){char a=jd[que[i]],b=jd[que[j]];int c=0;for(int k=0;k<strlen(mp[i][j]);++k){c=c*n+jd[mp[i][j][k]];}if(a+b!=c)return 0;}}return 1;
}void dfs(int deep){if(deep==n){if(!Check()){return;}for(int i=1;i<=n;++i)    printf("%c=%d ",que[i],jd[que[i]]);printf("\n");printf("%d",n);exit(0);}for(int i=0;i<n;++i){if(!vis[i]){for(int j=1;j<=n;j++){if(jd[que[j]]==-1){vis[i]=1;jd[que[j]]=i;dfs(deep+1);vis[i]=0;jd[que[j]]=-1;}}}}
}
int main(){cin>>n;n--;scanf("%s",s);for(int i=1;i<=n;++i){scanf("%s",s);Map[s[0]]=i;que[i]=s[0];jd[s[0]]=-1;}for(int i=1;i<=n;++i){scanf("%s",s);char ch=s[0];for(int j=1;j<=n;++j){scanf("%s",s);for(int k=0;k<strlen(s);++k)mp[Map[ch]][j][k]=s[k];}}dfs(0);printf("ERROR!");return 0;
}

转载于:https://www.cnblogs.com/cellular-automaton/p/7467401.html

【Luogu】P1013进制位(搜索)相关推荐

  1. 洛谷 P1013 进制位

    P1013 进制位 题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E ...

  2. 1个字节占多少个16进制位

    1个字节是8位,二进制8位:xxxxxxxx 范围从 00000000-11111111,表示0到255. 一位16进制数(用二进制表示是xxxx)最多只表示到15(即对应16进制的F),要表示到25 ...

  3. 为什么一个字节表示2个16进制位?

    很多初学者会对进制存在疑惑 比如为什么在十六进制存储中一个字节是用两个字符来表示?比如用0a表示10  用03就表示3呢? 因为一个字节8个比特(8位),就是8个二进制位 四个二进制数最大表示为15, ...

  4. PAT甲级1019 General Palindromic Number:[C++题解]进制位、回文数、vector来做

    文章目录 题目分析 题目链接 题目分析 ac代码 #include<bits/stdc++.h> using namespace std;//判回文数 bool check(vector& ...

  5. PAT甲级1027 Colors in Mars :[C++题解]进制位

    文章目录 题目分析 题目链接 题目分析 就是十进制数转化成13进制,然后数字转化成字符. get函数用来将数字转化成字符. 如果 一位数 就是return x +'0'如果 大于9 就是 return ...

  6. PAT甲级1010 Radix :[C++题解]进制位、秦九韶算法、二分(PAT通过率最低的一道题0.11)

    文章目录 题目分析 题目链接 题目分析 分析: 本题思路分两步. 第一步:先把给出数值和进制的数,暂定为N1,转换成10进制,即为target. 第二步: 判断一下N2在多少进制下是等于target的 ...

  7. 计算机中的进制位运算

    为什么计算机用二进制计数: 计算机是由电路构成的,电路只有0和1 两种状态. 不同进制间的换算: 在十进制中,个位的1代表10⁰=1,十位的1代表10¹=10,百位的1代表10²=100,所以:123 ...

  8. PAT甲级1015 Reversible Primes :[C++题解]进制位、秦九韶算法、判质数

    文章目录 题目分析 题目链接 题目分析 十进制转化为d进制如何做? while(n){n% d; //取d进制数下的最低位n/=d; } 比如 十进制下的n=13 ,进制d =2.经过 反复的n%d ...

  9. [luoguP1013] 进制位(搜索)

    传送门 纯搜索,无优化! #include <cstdio> #include <cstring> #include <iostream> #include < ...

最新文章

  1. Lombok!代码简洁神器还是代码“亚健康”元凶?
  2. Mysql 索引优化分析_如何优化MySQL的性能?从索引方面优化案例分析
  3. Android手机摇一摇的实现SensorEventListener
  4. vue 动态设置背景图片
  5. How to resolve ATC error message Package Violation (Error) - Missing Use Access (USEM)
  6. java outofmemory 处理_java.lang.OutOfMemoryError处理错误
  7. 简历准备及面试技巧,你应该知道的一切
  8. Php连接及读取和写入mysql数据库的常用代码
  9. Redis模式对比:主从模式 VS 哨兵sentinel模式 VS Redis cluster模式
  10. 为什么机器学习很难学习因果关系?
  11. SQL2005服务器上安装SQL2008失败
  12. Python+OpenCV:图像梯度
  13. 为什么不建议Java程序员用阿里巴巴规范,而使用GoogleGuava编程
  14. HTML5-Video(视屏播放)
  15. acs510使用技巧_ACS510-ABB操作说明
  16. matlab2008 软件下载及安装教程
  17. 读书笔记 · AI产品经理的工作流程
  18. 【软件工程期末复习】知识点+大题详解(E-R图、数据流图、N-S盒图、状态图、活动图、用例图....)
  19. java实现电子签名技术_h5实现电子签名
  20. 华为HCNA路由与交换eNSP实战(1)静态路由基础

热门文章

  1. Redis 笔记(08)— 事务(一次执行多条命令、命令 watch/multi/exec/discard、错误处理)
  2. 2017 年已读书单总结
  3. 那还剩下多少学习激情?
  4. 对字符数组输入输出数组名是否加取地址符的一些理解
  5. Android数据持久化:SharePreference
  6. YOLOV4各个创新功能模块技术分析(一)
  7. 客快物流大数据项目(十三):Docker镜像
  8. 2021年大数据常用语言Scala(十三):基础语法学习 函数 重点掌握
  9. Python:numpy生成正态分布的平均数
  10. python 的保留字