zoukankan      html  css  js  c++  java
  • Codeforces Round #599 (Div. 2) B2. Character Swap (Hard Version) 构造

    链接:https://www.luogu.com.cn/problem/CF1243B2 

    题意:给你长度为n的两个字符串s和t,你可以最多进行2*n次操作,每次操作选择i和j,然后交换s[i]和t[j],问你能否使得两个字符串相同

    构造方法:假如(0~i)部分s和t已经相等,在i位置时首先在(i+1~t.size()-1)里找有没有和t[i]相同的字符,如果找到,则交换s[i]和t[j],如果找不到,则在s中找,找到之后,先将s[j]与t[t.size()-1],交换,再将s[i]与t[t.size()-1]交换这样的次数最多也就是2*n次;然后s=t;

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=3e5+10;
    int n;
    string s,t;
    vector<pair<int ,int> > v;
    void solve()
    {
        cin>>n>>s>>t;
        v.clear();
        for(int i=0; i<s.size(); i++)
        {
         if(s[i]!=t[i])
            {
                int flag=0;
                for(int j=i+1; j<t.size(); j++)
                {
                    if(t[i]==t[j])
                        {
                            flag=1;
                            v.push_back(make_pair(i+1,j+1));
                            swap(s[i],t[j]);
                            break;
                        }
                }
            if(!flag)
            {
                for(int j=i+1; j<s.size(); j++)
                {
                    if(t[i]==s[j])
                    {
                        flag=1;
                        v.push_back(make_pair(j+1,t.size()));
                        swap(s[j],t[t.size()-1]);
                        v.push_back(make_pair(i+1,t.size()));
                        swap(s[i],t[t.size()-1]);
                        break;
                    }
                }
            }
            if(!flag)
            {
                puts("NO
    ");
                return ;
            }
        }
        }
        puts("YES
    ");
        cout<<v.size()<<endl;
        for(int i=0; i<v.size(); i++)
            cout<<v[i].first<<" "<<v[i].second<<endl;
        return ;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
            solve();
        return 0;
    }

     

  • 相关阅读:
    Linux删除文件相关命令
    Bing语句
    VS2013配置Winpcap
    node10-mongoose
    node09-cookie
    node08-express
    node07-http
    node06-path
    node05-fs
    node04-buffer
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/12683483.html
Copyright © 2011-2022 走看看