ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CodeForces 903E Swapping Characters

2019-07-01 09:43:49  阅读:238  来源: 互联网

标签:26 const Swapping int LL 个数 CodeForces Characters define


Swapping Characters

题解:

先算出其他串和第一个串的字母个数是否相同。

再算出其他串和第一个串不同的字母位置个数。

然后枚举第一个串交换的位置。

计算交换之后的不同字母的位置个数。

如果个数为0,则至少有2个相同的字母。

如果个数为2,则说明交换那2个位置之后可以相同。

 

代码:

#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const int _inf = 0xc0c0c0c0;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL _INF = 0xc0c0c0c0c0c0c0c0;
const LL mod =  (int)1e9+7;
const int N = 3e4;
string s[N];
int dif[N];
int num[26], num2[26];
int main(){
    int k, n;
    scanf("%d%d", &k, &n);
    for(int i = 1; i <= k; ++i)
        cin >> s[i];
    int f = 0;
    for(int i = 0; i < n; ++i)
        ++num[s[1][i]-'a'];
    for(int i = 0; i < 26; ++i)
        f += (num[i] > 1);
    for(int i = 2; i <= k; ++i){
        for(int j = 0; j < n; ++j){
            ++num2[s[i][j]-'a'];
            dif[i] += (s[i][j] != s[1][j]);
        }
        for(int j = 0; j < 26; ++j){
            if(num[j] != num2[j]){
                puts("-1");
                return 0;
            }
            num2[j] = 0;
        }
    }
    for(int i = 0; i < n; ++i){
        for(int j = i+1; j < n; ++j){
            int ok = 1;
            for(int z = 2; z <= k; ++z){
                int cnt = dif[z];
                cnt -= (s[1][i] != s[z][i]);
                cnt -= (s[1][j] != s[z][j]);
                cnt += (s[1][j] != s[z][i]);
                cnt += (s[1][i] != s[z][j]);
                if((!cnt && f) || cnt == 2) ok++;
            }
            if(ok == k){
                swap(s[1][i], s[1][j]);
                cout << s[1] << endl;
                return 0;
            }
        }
    }
    puts("-1");
    return 0;
}
View Code

 

标签:26,const,Swapping,int,LL,个数,CodeForces,Characters,define
来源: https://www.cnblogs.com/MingSD/p/11112274.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有