• 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("
    ");
           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;
    }
    
  • 相关阅读:
    查看jvm的cg情况
    什么是json
    httpclient工具类
    mysql 优化思路(1)
    mysql存取日期出问题
    springboot和tomcat jar包冲突
    递归
    如何去理解return?
    js BOM判断当前窗口是否最顶层。
    个人笔记,关于ajax 如果没有请求成功不允许再次请求的方法。
  • 原文地址:https://www.cnblogs.com/xmcword/p/13768403.html
Copyright © 2020-2023  润新知