2 条题解

  • 0
    @ 2026-5-1 11:25:17
    #include <bits/stdc++.h>
    using namespace std;
    
    int cnt[256];
    int pal[16];
    int map2idx[256];
    
    int hex2dec(char c){
        if(c>='0'&&c<='9') return c-'0';
        return 10+c-'A';
    }
    
    char dec2hex(int x){
        if(x<10) return '0'+x;
        return 'A'+(x-10);
    }
    
    bool cmp(int a,int b){
        if(cnt[a]!=cnt[b]) return cnt[a]>cnt[b];
        return a<b;
    }
    
    int main(){
        int n;cin>>n;
        vector<vector<int>> img(n);
        memset(cnt,0,sizeof cnt);
        for(int i=0;i<n;i++){
            string s;cin>>s;
            for(int j=0;j<(int)s.size();j+=2){
                int v=hex2dec(s[j])*16+hex2dec(s[j+1]);
                img[i].push_back(v);
                cnt[v]++;
            }
        }
        vector<int> all;
        for(int i=0;i<256;i++) if(cnt[i]>0) all.push_back(i);
        sort(all.begin(),all.end(),cmp);
        for(int i=0;i<16;i++) pal[i]=all[i];
        for(int g=0;g<256;g++){
            int best=0;
            for(int i=1;i<16;i++){
                int d1=abs(g-pal[i]);
                int d0=abs(g-pal[best]);
                if(d1<d0||(d1==d0&&i<best)) best=i;
            }
            map2idx[g]=best;
        }
        for(int i=0;i<16;i++){
            cout<<dec2hex(pal[i]/16)<<dec2hex(pal[i]%16);
        }
        cout<<endl;
        for(int i=0;i<n;i++){
            for(int v:img[i]) cout<<dec2hex(map2idx[v]);
            cout<<endl;
        }
        return 0;
    }
    //:)
    //114514
    

    信息

    ID
    3450
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    7
    已通过
    3
    上传者