ZCMU—1724

本文介绍了一种算法,用于从给定的字符串中通过最少的操作次数构造出字典序最小的回文串。该算法利用了调整字符串顺序不计操作次数的特点,详细解释了如何选择替换字符以达到目标。

1724: 字符串

Time Limit: 1 Sec   Memory Limit: 128 MB
[ Submit][ Status][ Web Board]

Description

给你一个小写字母组成的字符串,你可以任意的改变字母变成其他字母,也可以调整字符串的顺序,但是,调整顺序不计操作次数。要求输出操作次数最小的时候字典序最小的回文串。

Input

多组测试数据

输入一个字符串s (1<=|s|<=1000)

Output

输出改变后的字符串

Sample Input

aabc
aabcd

Sample Output

abba
abcba

【分析】

这道题...乍一看好像可能是个dp..但是仔细读题之后发现其实...并没有那么复杂
因为题目里说了调整字符串顺序不算操作次数,有了这句话,这道题就不需要再考虑字符的移动情况,所以这道题就简化成了给你一串字符,将其中一些字符改变之后使得字符中出现次数为奇数的字符只有一个或者没有。因为要满足回文串这个条件
比如aabc   a出现两次,b一次,c一次,只要把b和c中的一个换掉就可以了。
那怎么换呢?因为要满足字典序最小,那么显然,把大的字符换成小的字符就可以了,换的过程中,显然不能把出现次数为奇数的字符换成出现次数为偶数的字符,显然这样会导致原来是偶数次的字符变成奇数次,这样就不能满足首要条件操作次数最小
所以,只要从大的字符开始换,每次将奇数次的大字符换成奇数次的小字符就可以了..

【代码】
#include<stdio.h>
#include<string.h>
int main()
{
    char s[10000];
    int f[500];
    while(~scanf("%s",s))
    {
        memset(f,0,sizeof(f));
        for(int i=0;s[i]!='\0';i++) f[s[i]]++;
        for(int i='z';i>='a';i--)
            if(f[i]%2)
                for(int j='a';j<i;j++)
                    if(f[j]%2!=0) 
                    {
                        f[j]++;
                        f[i]--;
                        break;
                    }
        for(int i='a';i<='z';i++)
            for(int j=0;j<f[i]/2;j++)
                printf("%c",i);
        for(int i='a';i<='z';i++) 
            if(f[i]%2!=0) 
				printf("%c",i);
        for(int i='z';i>='a';i--)
            for(int j=0;j<f[i]/2;j++)
                printf("%c",i);
        printf("\n");
    }
}


内容概要:本文围绕基于模型预测控制(MPC)对无人水面艇(USV)进行自主控制的研究展开,利用Matlab代码实现相关算法与仿真。研究重点在于构建USV的动力学模型,并设计MPC控制器以实现精确的轨迹跟踪与自主导航。通过优化目标函数和约束条件,MPC能够有效处理系统的多变量耦合特性及时域限制,提升控制精度与稳定性。文中详细展示了算法实现流程、参数设置、仿真结果对比分析,验证了MPC在复杂海洋环境下对USV路径跟踪与运动控制的有效性和鲁棒性。【无人船】基于模型预测控制(MPC)对USV进行自主控制研究(Matlab代码实现); 适合人群:具备自动控制理论基础和Matlab编程能力,从事无人船、自动驾驶或智能控制方向的研究生、科研人员及工程技术人员;熟悉最优控制、预测控制等相关概念者更佳; 使用场景及目标:①应用于无人船自主航行系统的开发与仿真测试;②用于研究MPC在非线性、多约束动态系统中的控制性能;③为智能海洋装备的路径跟踪与运动控制提供技术参考与实现方案; 阅读建议:建议读者结合提供的Matlab代码逐模块运行与调试,深入理解状态空间建模、代价函数构造、约束处理及求解器调用等关键步骤,同时可尝试调整环境干扰、初始条件或权重矩阵以观察控制效果变化,从而全面掌握MPC在实际系统中的应用方法。
【源码免费下载链接】:https://renmaiwang.cn/s/744ny 在IT行业中,电子邮件服务是日常通信的重要组成部分,在企业级应用中发挥着不可或缺的作用。为了保障邮件传输的安全性,SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议被广泛采用。本项目针对“发送邮件,支持SSL/TLS协议,并支持Gmail、Hotmail、Yahoo”需求提供了一种解决方案,使得开发者能够轻松实现安全的邮件发送功能。其中,“发邮件”指程序或系统具备发送电子邮件的能力,这通常涉及S/MTP(Simple Mail Transfer Protocol)协议。然而,仅依赖于S/MTP并不能满足安全性要求,因为未经加密的S/MTP传输过程可能使敏感信息如用户名、密码和邮件内容在传输过程中被截获。SSL和TLS作为网络安全协议,在网络通信中提供加密处理,从而保护数据隐私和完整性。它们通过建立安全通道确保邮件在发送者与接收者之间不会被篡改或窃听。尽管SSL逐渐被TLS取代,但在邮件服务领域两者仍常被提及。JMAIL作为一种Java库,可能不具备支持Gmail、Hotmail等现代邮箱服务的功能,因为这些服务要求采用SSL/TLS进行身份验证和数据加密。而“现在这份代码”(即CSmtp_v2_0_ssl)则是一个更为先进的解决方案,它明显包含了对SSL/TLS的支持,并可与主流邮件服务商实现顺利对接。Gmail、Hotmail和Yahoo都是知名免费电子邮件服务提供商,在它们提供的服务中通常要求采用SSL/TLS进行邮件发送。Gmail由Google提供,Hotmail是Microsoft的Outlook.com的一部分,而Yahoo邮件则属于Verizon Media。这些服务均会提供SMTP服务器地址及所需端口号,并说明是否
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值