Vector+pair的用法

博客探讨了如何使用Vector和Pair解决字符串交换问题,强调了解决此类问题的必要条件和策略。在满足所有字母出现偶数次的情况下,通过不超过2n次交换使两个互异字符串相等。此外,还介绍了在洛谷P1090合井果子问题中,如何巧妙结合优先队列和Vector来解决问题。
摘要由CSDN通过智能技术生成

题目地址:
https://codeforces.com/contest/1243/problem/B2

题意:给两个互异的字符串 s 和 t ,选择某个 s[i] 和 t[j] 交换不超过 2n 次,问能否使得两个字符串相等。

题解:很显然有解的必要条件就是所有的字母出现都是偶数次,先判断这个。其次满足上面的必要条件之后必定有解,因为使用最多2次交换就可以消除至少1个位置上的不同。具体的做法是:固定已经相等的前半部分,然后假如 s[i]≠t[i],如果有某个后面的 s[id]=s[i] ,那么就把 s[id] 和 t[i] 交换。否则,必定存在某个后面的 t[id]=s[i] ,但是 t[id] 不能直接与 t[i] 交换,所以让它与 s[n] 交换(这样比较好写),然后把 s[n] 和 t[i] 交换。

#include <bits/stdc++.h>
using namespace std;
 
const int maxn = 55;
int T, n;
char s[maxn], t[maxn];
 
int main() {
   
    scanf("%d", &T);
    while (T--) {
   
        scanf("%d %s %s", &n, s + 1, t + 1);
        vector<pair<int, int> > V;
        bool flag = 0;
        for (int i = 1; i <= n; i++) {
   
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值