2 条题解
-
0
#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
- 上传者