zoukankan      html  css  js  c++  java
  • [CF1213E] Two Small Strings

    给定两个长度为 (2) 的串,你需要构造一个长度为 (3n) 的串,使得 a,b,c 三种字母各出现 (n) 次,且它不包含这两个串,字符集中仅有 a,b,c

    Solution

    画出转移图,(3) 个点,(7) 条边,可能不连通

    但是很容易证明以下构造模式集可以对所有有解的情况给出合法的构造

    (以 (n=2) 为例)

    aabbcc
    aaccbb
    bbaacc
    bbccaa
    ccaabb
    ccbbaa
    abcabc
    acbacb
    bcabca
    bacbac
    cabcab
    cbacba
    

    于是我们用每种模式构造一个串,检验是否合法即可

    #include <bits/stdc++.h>
    using namespace std;
    
    int n;
    string a,b,s;
    
    void calc1(char x,char y,char z) {
        s.clear();
        s.append(n,x);
        s.append(n,y);
        s.append(n,z);
    }
    
    void calc2(char x,char y,char z) {
        s.clear();
        for(int i=1;i<=n;i++) s+=x,s+=y,s+=z;
    }
    
    void ok() {
        if(s.find(a)==s.npos && s.find(b)==s.npos) {
            cout<<"YES"<<endl<<s;
            exit(0);
        }
    }
    
    char p[3];
    
    signed main() {
        cin>>n>>a>>b;
        iota(p,p+3,'a');
        do {calc1(p[0],p[1],p[2]);ok();} while(next_permutation(p,p+3));
        do {calc2(p[0],p[1],p[2]);ok();} while(next_permutation(p,p+3));
        cout<<"NO";
    }
    
    
  • 相关阅读:
    java面向对象小总结
    eclipce 快捷键
    linux中查找和过滤的用法:find,grep
    shell脚本
    条形码和二维码
    Json简介
    牛客练习
    输入流操作
    Java编码
    maven入门
  • 原文地址:https://www.cnblogs.com/mollnn/p/12620809.html
Copyright © 2011-2022 走看看