• [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";
    }
    
    
  • 相关阅读:
    mock数据
    关于适配各种浏览器的图片预览。
    闭包
    兼容性 适配
    递归 使用callee
    webservice的model层命名空间不同的问题
    删除右键菜单中的Git
    windows server core 设置shell 及切换
    设置共享用户名密码
    Windows Remote Shell(WinRM)使用介绍
  • 原文地址:https://www.cnblogs.com/mollnn/p/12620809.html
Copyright © 2020-2023  润新知