zoukankan      html  css  js  c++  java
  • 【CF1256F】Equalizing Two Strings(逆序对)

    题意:给定两个长度均为n且由小写字母组成的字符串,可以进行若干次操作,每次从两个串中分别选一个长度相等的子串进行翻转,问是否存在能使两串相等的一系列操作方案

    n<=2e5

    思路:首先如果每种字母的个数不相同显然NO

    如果有某种字母出现超过两次显然YES,只要将两个字母移动到一起之后反复选择他便能无限次的无限制选择另一个串中长度为2的串进行交换,相当于冒泡排序

    对于剩余情况考虑逆序对的奇偶性,每一个长度超过2的操作都能表示为一系列长度=2的操作的集合

    冒泡排序每次能消除一个逆序对,如果两者逆序奇偶性相同只要小的那个在冒泡排序完成之后不断浪费次数即可

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 typedef unsigned int uint;
     5 typedef unsigned long long ull;
     6 typedef long double ld;
     7 typedef pair<int,int> PII;
     8 typedef pair<ll,ll> Pll;
     9 typedef vector<int> VI;
    10 typedef vector<PII> VII;
    11 typedef pair<ll,ll>P;
    12 #define N  200010
    13 #define M  1000000
    14 #define INF 1e9
    15 #define fi first
    16 #define se second
    17 #define MP make_pair
    18 #define pb push_back
    19 #define pi acos(-1)
    20 #define mem(a,b) memset(a,b,sizeof(a))
    21 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
    22 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
    23 #define lowbit(x) x&(-x)
    24 #define Rand (rand()*(1<<16)+rand())
    25 #define id(x) ((x)<=B?(x):m-n/(x)+1)
    26 #define ls p<<1
    27 #define rs p<<1|1
    28 #define fors(i) for(auto i:e[x]) if(i!=p)
    29 
    30 const int MOD=1e9+7,inv2=(MOD+1)/2;
    31       double eps=1e-6;
    32       int dx[4]={-1,1,0,0};
    33       int dy[4]={0,0,-1,1};
    34 
    35 char a[N],b[N];
    36 int s1[N],s2[N];
    37 
    38 int read()
    39 {
    40    int v=0,f=1;
    41    char c=getchar();
    42    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
    43    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
    44    return v*f;
    45 }
    46 
    47 ll readll()
    48 {
    49    ll v=0,f=1;
    50    char c=getchar();
    51    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
    52    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
    53    return v*f;
    54 }
    55 
    56 int main()
    57 {
    58     int cas=read();
    59     while(cas--)
    60     {
    61         int n=read();
    62         rep(i,0,25) s1[i]=s2[i]=0;
    63         scanf("%s",a+1);
    64         scanf("%s",b+1);
    65         rep(i,1,n)
    66         {
    67             s1[a[i]-'a']++;
    68             s2[b[i]-'a']++;
    69         }
    70         int flag=1;
    71         rep(i,0,25)
    72          if(s1[i]!=s2[i]){flag=0; break;}
    73         if(!flag)
    74         {
    75             printf("NO
    ");
    76             continue;
    77         }
    78         flag=0;
    79         rep(i,0,25)
    80          if(s1[i]>=2){flag=1; break;}
    81         if(flag)
    82         {
    83             printf("YES
    ");
    84             continue;
    85         }
    86         int t1=0,t2=0;
    87         rep(i,0,25) s1[i]=s2[i]=0;
    88         rep(i,1,n)
    89         {
    90             int x=a[i]-'a',y=b[i]-'a';
    91             rep(j,x+1,25) t1=(t1+s1[j])%2;
    92             rep(j,y+1,25) t2=(t2+s2[j])%2;
    93             s1[x]++; s2[y]++;
    94         }
    95         if(t1==t2) printf("YES
    ");
    96          else printf("NO
    ");
    97     }
    98     return 0;
    99 }
  • 相关阅读:
    【已解决】github中git push origin master出错:error: failed to push some refs to
    好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    THINKPHP 5.0目录结构
    thinkphp5.0入口文件
    thinkphp5.0 生命周期
    thinkphp5.0 架构
    Django template
    Django queryset
    Django model
    Python unittest
  • 原文地址:https://www.cnblogs.com/myx12345/p/11799045.html
Copyright © 2011-2022 走看看