进制位

版权声明:转载者乖乖♂站好 https://blog.csdn.net/Eric1561759334/article/details/82924233

题目
https://www.luogu.org/problemnew/show/P1013

思路

先在前半部分记录一下并将字母转化为数字,在这个部分枚举一下并判断。
进制就是n-1

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=15;
int n,pipei[N];
char key,str[N];
char pd[N][N][N];
string mi;
int main()
{
    memset(pipei,0,sizeof(pipei));
    scanf("%d",&n);    
    cin>>key;
    for(int i=0;i<n-1;i++)
    {
        char c;
        cin>>c;
        str[i]=c;
    }
    for(int i=0;i<n-1;i++)
    {
        char c;
        cin>>c;
        for(int j=0;j<n-1;j++)
        {
            cin>>pd[i][j];
            if(strlen(pd[i][j])==1)
            {
                for(int k=0;k<n-1;k++)
                if(str[k]==pd[i][j][0])
                {
                    pipei[k]++;
                    break;
                }
            }
        }
    }
    int jia[N],anss=0;
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1;j++)
        {
            if(pd[i][j]!=NULL)
            {
                anss=0;
                for(int l=0;l<=strlen(pd[i][j]);l++)
                {
                    for(int k=0;k<n-1;k++)
                    {
                        if(pd[i][j][l]==str[k])
                        {
                            jia[l]=pipei[k]-1;
                            anss=anss*10+jia[l];
                        }
                    }
                }
                int ans=pipei[i]+pipei[j]-2;
                ans=ans/(n-1)*10+ans%(n-1);
                if(ans!=anss)
                {
                    printf("ERROR!");
                    return 0;
                }
            }
        }
    }
    for(int i=0;i<n-1;i++)printf("%c=%d ",str[i],pipei[i]-1);
    printf("\n%d",n-1);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Eric1561759334/article/details/82924233