10分 求解
查看原帖
10分 求解
796940
OIer_xmf楼主2023/10/12 22:15

10分求大佬指点

#include<bits/stdc++.h>
using namespace std;
string a[25],b,e;
long long n,c[260],d[260],ma,ma1,d1=0;
string szsl(long long x){
	string s="",s1="";
	if(x==0)s="00";
	while(x>0){
		if(x%16<=9)s+=char(x%16+48);
		else s+=char(x%16+55);
		x/=16;
	}
	for(int i=s.size()-1;i>=0;i--){
		s1+=s[i];
	}
	if(s1.size()<2)s1='0'+s1;
	return s1;
}
long long slzs(string x){
	long long s=0;
	for(int i=0,j=x.size()-1;i<x.size();i++,j--){
		if(x[i]<='9')s+=pow(16,j)*(x[i]-'0');
		else s+=pow(16,j)*(x[i]-55);
	}
	return s;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=0;i<=255;i++)d[i]=-1;
	for(int i=1;i<=n;i++){
		b=a[i];
		for(int j=0;j<b.size();j+=2){
			e="";
			e+=b[j];
			e+=b[j+1];
			c[slzs(e)]++;
		}
	}
	d1=0;
	for(int i=1;i<=16;i++){
		for(int j=0;j<=255;j++){
			if(d[j]==-1&&c[j]>ma){
				ma=c[j],ma1=j;
			}
		}
		cout<<szsl(ma1);
		d[ma1]=d1,ma=0,d1++;
	}
	cout<<endl;
	for(int i=1;i<=n;i++){
		b=a[i];
		for(int j=0;j<b.size();j+=2){
			e="";
			e+=b[j];
			e+=b[j+1];
			if(d[slzs(e)]!=-1){
				if(d[slzs(e)]<=9)cout<<d[slzs(e)];
				else cout<<char(d[slzs(e)]+55);
			}
			else{
				for(int k=slzs(e)-1,r=slzs(e)+1;k<r;k--,r++){
					if(d[k]!=-1){
						if(d[k]<=9)cout<<d[k];
						else cout<<char(d[k]+55);
						break;
					}
					if(d[r]!=-1){
						if(d[r]<=9)cout<<d[r];
						else cout<<char(d[r]+55);
						break;
					}
				}
			}
		}
		cout<<endl;
	}
	return 0;
}
2023/10/12 22:15
加载中...