UVA 10785 - The Mad Numerologist

本文介绍了一种构造特定条件下最小字典序字符串的方法。利用元音和辅音的组合,确保元音位于奇数位置且数量不超过21个,辅音位于偶数位置且数量不超过5个。通过算法实现这一构造过程,并给出具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:

元音放在奇数位,辅音放在偶数位,元音个数不超过21个,辅音不超过5个。满足以上条件的同时以最小字典序输出。

太懒了   不想优化

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int T,cnt = 1;
char v[6] ="AUEOI";
char c[23] = "JSBKTCLDMVNWFXGPYHQZR";

struct word
{
    char s;
    int vis;
}ST[25];

int cmp(struct word a, struct word b)
{
    if(a.s > b.s)return 0;
    if(a.s < b.s)return 1;
}

int main()
{
    #ifdef LOCAL
    freopen("in.txt","r",stdin);
    #endif // LOCAL
    int CASE;
    scanf("%d",&CASE);
    while(CASE--)
    {
        int N;
        scanf("%d",&N);
        char name[300];
        int v_n = 0,t,l;
        t = N/2;
        if(N%2!=0)t++;
        T = t/21;
        int flag  = 0;
        if(t%21 !=0){ T++; flag = 1;}
        for(int i = 0; i < T; i++)
        {
            ST[i].s = v[i];
            ST[i].vis = 21;
            if(flag&& i == T-1)ST[i].vis = t%21;

        }
        sort(ST,ST+T,cmp);//字典序
        int j = 1,k = 0;
        for(int i = 0 ; i < t ;i++)
        {
            if(j > ST[k].vis){j = 1;k++;}
            name[2*i] = ST[k].s;
            j++;
        }
        t = N/2;//辅音的总个数
        T = t/5;
        flag  = 0;
        if(t%5 !=0){ T++; flag = 1;}
        for(int i = 0; i < T; i++)
        {
            ST[i].s = c[i];
            ST[i].vis = 5;
            if(flag&& i == T-1)ST[i].vis = t%5;

        }
        sort(ST,ST+T,cmp);//字典序
        j = 1,k = 0;
        for(int i = 0 ; i < t ;i++)
        {
            if(j > ST[k].vis){j = 1;k++;}
            name[2*i+1] = ST[k].s;
            j++;
        }
        name[N] = '\0';
        printf("Case %d: %s\n",cnt++,name);
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值