P1013 进制位

洛谷团队希望加入!
题目描述
著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。 例如:

  • L K V E
    L L K V E
    K K V E KL
    V V E KL KK
    E E KL KK KV
    其含义为:

L+L=LL+L=L,L+K=KL+K=K,L+V=VL+V=V,L+E=EL+E=E

K+L=KK+L=K,K+K=VK+K=V,K+V=EK+V=E,K+E=KLK+E=KL

…… E+E=KVE+E=KV

根据这些规则可推导出:L=0L=0,K=1K=1,V=2V=2,E=3E=3

同时可以确定该表表示的是4进制加法

//感谢lxylxy123456同学为本题新加一组数据

输入格式
nn (n≤9)(n≤9)表示行数。

以下nn行,每行包括nn个字符串,每个字串间用空格隔开。(字串仅有一个为‘+’号,其它都由大写字母组成)

输出格式
① 各个字母表示什么数,格式如:L=0L=0,K=1K=1,……按给出的字母顺序。

② 加法运算是几进制的。

③ 若不可能组成加法表,则应输出“ERROR!”

输入输出样例
输入 #1复制
5

  • L K V E
    L L K V E
    K K V E KL
    V V E KL KK
    E E KL KK KV
    输出 #1复制
    L=0 K=1 V=2 E=3
    4
#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;
}
posted @ 2020-10-04 21:11  xmcword  阅读(213)  评论(0编辑  收藏  举报