除了一个 WA 全是 RE(注:样例也炸 WA)
查看原帖
除了一个 WA 全是 RE(注:样例也炸 WA)
955954
Miracle_InDream楼主2025/6/20 22:09
#include<bits/stdc++.h>
using namespace std;
const int N=30;
int n;
char mp[N][N*2];
struct node
{
    int num;
    int cnt;
}g[260];
bool cmp(node a,node b)
{
    if(a.cnt!=b.cnt)
    {
        return a.cnt>b.cnt;
    }
    return a.num<b.num;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n*2;j++)
        {
            cin>>mp[i][j];
        }
    }
    for(int i=0;i<255;i++)
    {
        g[i].num=i;
        g[i].cnt=0;
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            string s="";
            s+=mp[i][j*2-1];
            s+=mp[i][j*2];
            int num=0;
            if(s[0]>='A')
            {
                num+=s[0]-'A'+10;
            }
            else
            {
                num+=s[0]-'0';
            }
            num*=16;
            if(s[1]>='A')
            {
                num+=s[1]-'A'+10;
            }
            else
            {
                num+=s[1]-'0';
            }
            g[num].cnt++;
        }
    }
    sort(g,g+255,cmp);
    for(int i=0;i<16;i++)
    {
        string s="";
        int x=g[i].num;
        while(x>0)
        {
            int a=x%16;
            if(a>9)
            {
                s=char(a-10+'A')+s;
            }
            else
            {
                s=char(a+'0')+s;
            }
            x/=16;
        }
        cout<<s;
    }
    cout<<endl;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            string s="";
            s+=mp[i][j*2-1];
            s+=mp[i][j*2];
            int num=0;
            if(s[0]>='A')
            {
                num+=s[0]-'A'+10;
            }
            else
            {
                num+=s[0]-'0';
            }
            num*=16;
            if(s[1]>='A')
            {
                num+=s[1]-'A'+10;
            }
            else
            {
                num+=s[1]-'0';
            }
            int ans;
            int minn=0x3f3f3f3f;
            for(int k=0;k<16;k++)
            {
                if(minn>abs(g[k].num-num))
                {
                    minn=abs(g[k].num-num);
                    ans=k;
                }
            }
            if(ans<10)
            {
                cout<<ans;
            }
            else
            {
                cout<<char(ans-10+'A');
            }
        }
        cout<<endl;
    }
    return 0;
}
2025/6/20 22:09
加载中...