P9868 [NOIP2023] 词典

· · 个人记录

看题要没看懂就去推样例,想到有问题的地方就去推一下,别空想

40pts:

#include<bits/stdc++.h>
using namespace std;
int n,m,k[3005],k2[3005];
char s[3005];
int main(){
    memset(k,127,sizeof(k));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%s",s);
        for(int j=0;j<m;j++){
            if(j==0){
                k[i]=k2[j]=s[j]-'a';
            }
            else{
                k[i]=min(k[i],s[j]-'a');
                k2[i]=max(k2[i],s[j]-'a');
            }
        }
    }
    bool flag=1;
    for(int i=1;i<=n;i++){
        flag=1;
        for(int j=1;j<=n;j++){
            if(i==j) continue;
            if(k[i]>=k2[j]){
                flag=0;
                cout<<0;
                break;  
            }
        }
        if(flag){
            cout<<1;
        }
    }   
    return 0;
}

错因:

k[i]=k2[j]=s[j]-'a';

k2[i]->k2[j]

100pts:

#include<bits/stdc++.h>
using namespace std;
int n,m,k[3005],k2[3005];
char s[3005];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%s",s);
        for(int j=0;j<m;j++){
            if(j==0){
                k[i]=k2[i]=s[j]-'a';
            }
            else{
                k[i]=min(k[i],s[j]-'a');
                k2[i]=max(k2[i],s[j]-'a');
            }
        }
    }
    bool flag=1;
    for(int i=1;i<=n;i++){
        flag=1;
        for(int j=1;j<=n;j++){
            if(i==j) continue;
            if(k[i]>=k2[j]){
                flag=0;
                cout<<0;
                break;  
            }
        }
        if(flag){
            cout<<1;
        }
    }   
    return 0;
}