zoukankan      html  css  js  c++  java
  • Codeforces903E Swapping Characters

    题意:n个字符串,每个字符串长度为m(n*m<=5000),每个字符串必须移动两个字符串变成相同的字符串,问最后相同字符串是什么

    题解:一开始hash,极限数据会T,正解是把第一个字符串看做静止不懂,对其他字符串变换两个,如果和第一个相差一个或者两个字符或者相差0个而且有重复的字符就是可行的

    #include <bits/stdc++.h>
    #define maxn 5010
    #define INF 0x3f3f3f3f
    using namespace std;
    int n, m, f[maxn], dir[maxn][30], num[maxn];
    char s[maxn][maxn];
    int main(){
        scanf("%d%d", &n, &m);
        for(int i=0;i<n;i++){
            scanf("%s", s[i]);
            for(int j=0;j<m;j++){
                if(dir[i][s[i][j]-'a']) f[i] = 1;
                dir[i][s[i][j]-'a']++;
            }
            for(int j=0;j<26;j++){
                if(dir[i][j] != dir[0][j])
                    return printf("-1
    ")*0;
            }
        }
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                num[i] += s[i][j]!=s[0][j];
        for(int i=0;i<m;i++){
            for(int j=i+1;j<m;j++){
                int flag = 1;
                for(int k=1;k<n&&flag;k++){
                    int t = num[k]-(s[0][i]!=s[k][i])-(s[0][j]!=s[k][j])+(s[0][i]!=s[k][j])+(s[0][j]!=s[k][i]);
                    if(t>2||(t==0&&!f[k])) flag = 0;
                }
                if(flag){
                    swap(s[0][i], s[0][j]);
                    return 0*printf("%s
    ", s[0]);
                }
            }
        }
        printf("-1
    ");
        return 0;
    }
  • 相关阅读:
    A naive AI for TicTacToe
    table font size LaTex
    Python:关于爬虫(2)
    Python:关于爬虫(1)
    RStudio的安装
    Python中安装numpy matplotlib scipy
    python函数编程
    JavaScript的基础语法
    数据结构——线性表的顺序表示(5)
    数据结构——线性表的顺序表示(4)
  • 原文地址:https://www.cnblogs.com/Noevon/p/8676063.html
Copyright © 2011-2022 走看看