社区讨论
60pts求助
B3851[GESP202306 四级] 图像压缩参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m0atqsp4
- 此快照首次捕获于
- 2024/08/26 17:57 2 年前
- 此快照最后确认于
- 2025/11/04 22:22 4 个月前
改了几遍感觉没问题 但是wa四个点
Code:
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=50,CNT_MAX=300,inf=1e9+5;
struct CNT{
int dec,cnt;
string hex;
bool operator < (const CNT &u)const{
if (cnt==u.cnt)return dec<u.dec;
return cnt>u.cnt;
}
};
bool isBased[CNT_MAX];
int n;
int cnt[CNT_MAX];
vector<int> g[N];
vector<CNT> _count;
int base[CNT_MAX];
int charset_toDec[6]={10,11,12,13,14,15};
char charset_toHex[6]={'A','B','C','D','E','F'};
int toDec(string hex){
int k=1,res=0;
for (int i=hex.length()-1;i>=0;i--){
char c=hex[i];
int num;
if ('A'<=c&&c<='F')num=charset_toDec[c-'A'];
else num=c-'0';
res+=num*k;
k*=16;
}
return res;
}
string toHex(int dec){
if (dec==0)return "0";
string res;
stack<char> st;
while(dec){
int num=dec%16;
if (0<=num&&num<=9)st.push(num+'0');
else if (10<=num&&num<=15)st.push(charset_toHex[num-10]);
dec/=16;
}
while(!st.empty()){
res+=st.top();
st.pop();
}
return res;
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
for (int i=0;i<=256;i++)cnt[i]=inf;
for (int i=0;i<=256;i++)base[i]=inf;
/*for (int i=1;i<=155;i++)cout<<cnt[i]<<" ";
cout<<"\n";*/
cin>>n;
for (int i=1;i<=n;i++){
string s;
cin>>s;
for (int j=0;j<(int)s.length();j+=2){
string hex=s.substr(j,2);
int dec=toDec(hex);
g[i].push_back(dec);
if (cnt[dec]>(int)1e9)cnt[dec]=0;
cnt[dec]++;
}
}
//处理cnt
for (int i=0;i<=255;i++){
if (cnt[i]>(int)1e9){continue;}
string hex=toHex(i);
if (hex.length()!=2)hex.insert(0,"0");
_count.push_back({i,cnt[i],hex});
}
sort(_count.begin(),_count.end());
for (int i=0;i<=15;i++){
cout<<_count[i].hex;
base[_count[i].dec]=i;
isBased[_count[i].dec]=1;
}
cout<<"\n";
for (int i=1;i<=n;i++){
for (const auto &j:g[i]){
if (isBased[j])cout<<toHex(base[j]);
else{
int minn=INT_MAX,id;
for (int k=0;k<=255;k++){
if (base[k]>(int)1e9)continue;
if (abs(k-j)<minn){
minn=abs(k-j);
id=k;
}
}
cout<<toHex(base[id]);
}
}
cout<<"\n";
}
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...