AWWWWWAWAW 30pts求调
查看原帖
AWWWWWAWAW 30pts求调
1120678
13288917088c楼主2024/1/3 13:27
#include<bits/stdc++.h>
using namespace std;
int a[21][21],b[256],c[17],d[16],e[16],n,k,m;
string s;
int f(char x){
	if('0'<=x&&x<='9'){
		return x-'0';
	}
	return x-'A'+10;
}
bool cmp(int x,int y){
	return x<y;
}
void out(int k){
	if(k<10){
		cout<<k;
	}else{
		cout<<char(k-10+'A');
	}
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>s;
		m=s.size();
		for(int j=0;j<m;j+=2){
			a[i][j/2]=f(s[j])*16+f(s[j+1]);
			b[a[i][j/2]]++;
		}
	}
	m/=2;
	memset(c,-1,sizeof(c));
	for(int i=0;i<256;i++){
		c[16]=i;
		for(int j=15;j+1&&(c[j]==-1||b[c[j]]<b[c[j+1]]);j--){
			swap(c[j],c[j+1]);
		}
	}
	for(int i=0;i<16;i++){
		d[i]=c[i];
		out(c[i]/16);
		out(c[i]%16);
	}
	cout<<"\n";
    sort(d,d+16,cmp);
    for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			for(k=0;k<16;k++){
				if(d[k]>a[i][j]){
					break;
				}
			}
			if(k==16){
				a[i][j]=d[15];
			}else if(a[i][j]*2-d[k-1]-d[k]){
				a[i][j]=(a[i][j]-d[k-1]<d[k]-a[i][j])?(d[k-1]):(d[k]);
			}else{
				a[i][j]=(min(d[k-1],d[k]));
			}
			
			//两种都看一下,都是三十。 

//			if(k==16){
//				a[i][j]=d[15];
//			}else{
//				a[i][j]=(a[i][j]-d[k-1]<=d[k]-a[i][j])?(d[k-1]):(d[k]);
//			} 
			for(k=0;k<16;k++){
				if(a[i][j]==c[k]){
					out(k);
					break;
				}
			}
		}
		cout<<"\n";
	}
	return 0;
}
2024/1/3 13:27
加载中...