欢迎光临散文网 会员登陆 & 注册

GESP2023.6真题 图像压缩讲解

2023-06-17 15:36 作者:JamesAlanE  | 我要投稿

有没有大佬帮忙看一下,不知道怎么回事只有60,感觉写得都对的啊,是数据有问题还是什么?谢谢了😘

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n;
  4. char a[20]="0123456789ABCDEF";
  5. string s[25];
  6. map<string,char> m;
  7. struct cj
  8.     int sum=0,xb;
  9. }b[256];
  10. bool cmp(cj x,cj y)
  11. {
  12.     return x.sum>y.sum||(x.sum==y.sum&&x.xb<y.xb);
  13. }
  14. int change1(char x,char y)
  15. {
  16.     int ans=0;
  17.     if(x>='0'&&x<='9')
  18.         ans+=(x-'0')*16;
  19.     else
  20.         ans+=(x-'A'+10)*16;
  21.     if(y>='0'&&y<='9')
  22.         ans+=y-'0';
  23.     else
  24.         ans+=y-'A'+10;
  25.     return ans;
  26. }
  27. string change2(int x)
  28. {
  29.     string ans="";
  30.     ans+=a[x/16];
  31.     ans+=a[x%16];
  32.     return ans;
  33. }
  34. int main()
  35. {
  36.     cin>>n;
  37.     for(int i=1;i<=n;i++)
  38.     {
  39.         cin>>s[i];
  40.         int len=s[i].size();
  41.         char a1,a2;
  42.         for(int j=0;j<len;j+=2)
  43.         {
  44.             a1=s[i][j];a2=s[i][j+1];
  45.             b[change1(a1,a2)].sum++;
  46.             b[change1(a1,a2)].xb=change1(a1,a2);
  47.         }
  48.     }
  49.     sort(b,b+256,cmp);
  50.     for(int i=0;i<16;i++)
  51.     {
  52.         cout<<change2(b[i].xb);
  53.         m[change2(b[i].xb)]=a[i];
  54.     //    cout<<m[change2(b[i].xb)]<<endl;
  55.     }
  56.     cout<<endl;
  57.     for(int i=16;i<256;i++)
  58.     {
  59.         int min=0;
  60.         string s2=change2(b[i].xb);
  61.         //cout<<s2<<' ';
  62.         for(int j=1;j<16;j++)
  63.         {
  64.             if(abs(b[j].xb-b[i].xb)<abs(b[min].xb-b[i].xb)||(abs(b[j].xb-(b[i].xb))==abs(b[min].xb-b[i].xb)&&i<min))
  65.                 min=j;
  66.         //    cout<<abs(a[j]-b[i].sum)<<' ';
  67.         }
  68.         //cout<<min<<' ';
  69.         m[s2]=a[min];
  70.         //cout<<m[s2]<<endl;
  71.     }
  72.     
  73.     for(int i=1;i<=n;i++)
  74.     {
  75.         int len=s[i].size();
  76.         char a1,a2;
  77.         for(int j=0;j<len;j+=2)
  78.         {
  79.             a1=s[i][j];a2=s[i][j+1];
  80.             string s2="";
  81.             s2+=a1;
  82.             s2+=a2;
  83.             cout<<m[s2];
  84.         }
  85.         cout<<endl;
  86.     }
  87.     return 0;
  88. }
  89. /*
  90. 10
  91. 00FFCFAB00FFAC09071B5CCFAB76
  92. 00AFCBAB11FFAB09981D34CFAF56
  93. 01BFCEAB00FFAC0907F25FCFBA65
  94. 10FBCBAB11FFAB09981DF4CFCA67
  95. 00FFCBFB00FFAC0907A25CCFFC76
  96. 00FFCBAB1CFFCB09FC1AC4CFCF67
  97. 01FCCBAB00FFAC0F071A54CFBA65
  98. 10EFCBAB11FFAB09981B34CFCF67
  99. 01FFCBAB00FFAC0F071054CFAC76
  100. 1000CBAB11FFAB0A981B84CFCF66
  101. */

GESP2023.6真题 图像压缩讲解的评论 (共 条)

分享到微博请遵守国家法律