河南工业“玲珑杯”小天使改名

本文介绍了如何通过编程解决小天使ID变换问题,探讨了两种解法:暴力解法和常规解法,并提供了完整的C++代码实现。

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

题目地址:http://218.28.220.249:50015/JudgeOnline/problem.php?id=1268

题目描述

小天使的b站帐号被大家发现啦。于是小天使决定改名,将他原有ID中的两个不同位置的字母进行交换。(小天使有可能将两个不同位置的相同字母进行交换,虽然这样做他的ID并没有发生变化)
Lsf知道小天使原来的ID,他想知道某个ID是否可能是小天使的新ID。

输入

第一行为数据组数T(T≤100)。
每组数据的第一行是字符串s1,(2≤length(s1)≤1000),为小天使的原始ID。
第二行是字符串s2,(length(s2)=length(s1)),为Lsf猜测的ID。
s1,s2均只含小写字母。

输出

对每组数据输出一行,如果这个ID可能是小天使的新ID,输出YES,否则输出NO。

样例输入

3
ch
hc
aa
aa
abc
abb
样例输出

YES
YES
NO

题意很简单,但注意小天使必须要交换一次,即如果第一行是ab,第二行也是ab时这就是不符合的,比赛时因为这点,整个比赛都打崩了,当然还是我太弱。。。现在感觉都快不想搞了,。。。

第一种完全暴力解法,把所有交换方式都试出来,两个for循环搞定,不过用string时会超时,不过我第一次就没超时啊。。。代码如下:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
char s1[1010],s2[1010];
int solve(){
    int len = strlen(s1);
    for(int i=0;i<len;i++){
        for(int j=0;j<len;j++){
            if(i == j)  continue;
            swap(s2[i],s2[j]);
            if(strcmp(s1,s2) == 0)
                return 1;
            swap(s2[i],s2[j]);
        }
    }
    return 0;
}
int main(void){
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%s %s",s1,s2);
        if(solve()) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

第二种常规解法,判断字母中是否有重复,如果有重复,那么两个字符串相同也符合,如果没有重复就不能判断相等。然后再找出两个位置不同的字符,交换他们,然后再判断是否相同,代码如下:

#include<iostream>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
string s1,s2,s3,s4;
string yes = "YES\n",no = "NO\n";
void solve(){
    s3 = s1,s4 = s2;
    sort(s3.begin(),s3.end());
    sort(s4.begin(),s4.end());
    int i,j,isrep = false;
    for(i=1;i<s3.size();i++){
        if(s3[i] == s3[i-1]){
            isrep = true;
            break;
        }
    }
    if(!isrep){
        if(s1 == s2){
            cout << no;
            return;
        }
    }
    int flag = 0,u = -1,v = -1;
    for(int i=0;i<s1.size();i++){
        if(flag == 1 && s1[i] != s2[i]){
            v = i;
            break;
        }
        if(flag == 0 && s1[i] != s2[i]){
            u = i;
            flag = 1;
        }
    }
    if(u != -1 && v != -1)
        swap(s2[u],s2[v]);
    if(s1 == s2)
        cout << yes;
    else
        cout << no;
    return;
}
int main(void){
    int t;
    cin >> t;
    while(t--){
        cin >> s1 >> s2;
        solve();
    }
    return 0;
}
/**************************************************************
    Problem: 1268
    User: henu5502169
    Language: C++
    Result: 正确
    Time:68 ms
    Memory:1704 kb
****************************************************************/
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值