B3851 图像压缩 40pts 求调!!!急急急!!!
  • 板块学术版
  • 楼主Wangbingxiang
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/30 22:40
  • 上次更新2024/10/31 14:23:09
查看原帖
B3851 图像压缩 40pts 求调!!!急急急!!!
889828
Wangbingxiang楼主2024/10/30 22:40
#include<bits/stdc++.h>
using namespace std;
long long n,mx=1000,pos;
char a,b;
long long cnt[520],tot,p[260],tt,shu[520];
char mu[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
long long zi(char a){
	if(a>='0' && a<='9') return a-'0';
	else if(a>='A' && a<='F') return a-'A'+10;
}
long long change(char a,char b){
	return zi(b)+16*zi(a);
}
long long hui(long long x){
	long long l=x,r=x;
	while(1){
		--l;
		++r;
		if(cnt[l]!=0) return cnt[l]-1;
		if(cnt[r]!=0) return cnt[r]-1;
	}
}
char ch[51][51];
int main(){
	scanf("%lld\n",&n);
	for(long long i=1;i<=n;i++){
		tot=0;
		do{
			a=getchar();
			if(a=='\n') break;
			b=getchar();
			if(b=='\n') break;
			cnt[change(a,b)]++;
			//cout<<a<<b<<endl;
			ch[i][++tot]=a;
			ch[i][++tot]=b;
		}while(a!='\n' && b!='\n');
		shu[i]=tot;
	}
	do{
		mx=0;
		for(long long i=0;i<=255;i++){
			if(cnt[i]>mx){
				mx=cnt[i];
				pos=i;
			}
		}
		if(mx==0) break;
		p[++tt]=pos;
		cnt[pos]=0;
	}while(mx!=0);
	for(long long i=1;i<=min((long long)16,tt);i++){
		cout<<mu[p[i]/16]<<mu[p[i]%16];
		cnt[p[i]]=i;
	}
	cout<<endl;
	for(long long i=1;i<=n;i++){
		for(long long j=0;j<shu[i]/2;j++){
			if(cnt[change(ch[i][j*2+1],ch[i][j*2+2])]!=0){
				cout<<mu[cnt[change(ch[i][j*2+1],ch[i][j*2+2])]-1];
			}else{
				cout<<mu[hui(change(ch[i][j*2+1],ch[i][j*2+2]))];
			}
		}
		cout<<endl;
	}
	return 0;
}

2024/10/30 22:40
加载中...