CF12B Correct Solution?

CF12B Correct Solution?

洛谷传送门

题目描述(舍弃各种乱七八糟的故事)

给定一个数NN,要求把NN的各个数位打乱,要求组成一个可能的,最小的数(最小数有可能含有前导00)。现在已经有一个“最小数”,请你判断这个“最小数”是不是最小数。

第一行输入n不含前导0。
第二行输入的假定的最小数可能含有前导0。 题目要求排序后的最小数不含前导0。

输入格式

两行。 第一行是给定的数NN。 第二行是假定的NN重组的“最小数”。

输出格式

一行。 如果输入的最小数就是NN重组的最小数,输出“OK”。 否则输出“WRONG_ANSWER”。

Translated by LiM_817


题解:

依题意模拟即可。

代码:

#include<cstdio>
#include<cstring>
using namespace std;
char a1[20],a2[20];
int cnt1[11],cnt2[11];
int ans[20],tot;
int main()
{
    // freopen("rhodes.in","r",stdin);
    // freopen("rhodes.out","w",stdout);
    scanf("%s%s",a1+1,a2+1);
    int len1=strlen(a1+1);
    int len2=strlen(a2+1);
    if(len1!=len2)
    {
        puts("WRONG_ANSWER");
        return 0;
    }
    if(a1[1]=='0'&&a2[1]=='0')
    {
        puts("OK");
        return 0;
    }
    if(a2[1]=='0')
    {
        puts("WRONG_ANSWER");
        return 0;
    }
    for(int i=1;i<=len1;i++)
    {
        int t1=a1[i]-'0';
        int t2=a2[i]-'0';
        cnt1[t1]++;
        cnt2[t2]++;
    }
    for(int i=0;i<=9;i++)
        if(cnt1[i]!=cnt2[i])
        {
            puts("WRONG_ANSWER");
            return 0;
        }
    for(int i=1;i<=9;i++)
        if(cnt1[i])
        {
            ans[++tot]=i;
            cnt1[i]--;
            break;
        }
    for(int i=1;i<=cnt1[0];i++)
        ans[++tot]=0;
    for(int i=1;i<=9;i++)
        if(cnt1[i])
            for(int j=1;j<=cnt1[i];j++)
                ans[++tot]=i;
    for(int i=1;i<=tot;i++)
        if(ans[i]!=(a2[i]-'0'))
        {
            puts("WRONG_ANSWER");
            return 0;
        }
    puts("OK");
    return 0;
}
posted @ 2020-11-27 10:29  Seaway-Fu  阅读(79)  评论(0编辑  收藏  举报