lg P1013 [NOIP1998 提高组] 进制位

证明 n-1进制

1.只缺一个 显然

2.缺>=2

1.缺1 -》 an+ai >an 且有n种可能 则一定两位数 1ai 所以一定有 1

2.缺其他  无1 -》显然不符

所以完整 -》 得证

ERROER

check

//再写if时 判断条件写全
//设置变量时,搞明白具体含义,在纸上写出来
/*
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

L=0 K=1 V=2 E=3
4
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------debug\n");
using namespace std;

int n,ans[15],mp[15];
char ch[15][15][3];

int check(int x,int y)
{
    int sum=ans[x]+ans[y];
    int cur=ch[x][y][1]-'A'+1;
    if(sum>=n-1&&mp[cur]!=1) return 0;
    if(sum>=n-1&&mp[cur]==1)
    {
         cur=ch[x][y][2]-'A'+1;
         sum-=n-1;
         if(mp[cur]!=sum) return 0;
    }
    if(sum!=mp[cur]) return 0;
    return 1;
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;    for(int i=1;i<=n;i++) cin>>ch[1][i]+1;
    for(int i=2;i<=n;i++)
    {
        int cnt=0;
        for(int j=1;j<=n;j++)
        {
            cin>>ch[i][j]+1;
            cnt+=strlen(ch[i][j]+1)>=2;
        }
        ans[i]=cnt;
        mp[ch[i][1][1]-'A'+1]=cnt;
    }
    
    for(int i=2;i<=n;i++)
    {
        for(int j=2;j<=n;j++)
        {
            if(check(i,j)==0) {
                cout<<"ERROR!"<<endl;
                return 0;
            }
        }
    }
    for(int i=2;i<=n;i++) cout<<ch[1][i][1]<<"="<<mp[ch[1][i][1]-'A'+1]<<" ";
    cout<<endl<<n-1<<endl;
    return 0;
}
View Code

 

posted @ 2023-07-06 09:31  JMXZ  阅读(12)  评论(0)    收藏  举报