zoukankan      html  css  js  c++  java
  • 【codeforces 379D】New Year Letter

    【题目链接】:http://codeforces.com/contest/379/problem/D

    【题意】

    让你构造出两个长度分别为n和m的字符串s[1]和s[2]
    然后按照连接的规则,顺序连接s[n-2]和s[n-1]得到s[n]
    (n>=3)
    即s[n] = s[n-2]+s[n-1]
    以此规则得到s[k];
    要求s[k]恰好出现x个“AC”子串;

    【题解】

    暴力题;
    枚举s1有ac1个”AC”子串,s2有ac2个”AC”子串;
    这里只有字符串的尾部为A且下一个字符串的头部为C才能富裕出一个“AC”子串;
    则我们再枚举两个字符串的头尾;
    即头部要不要加一个’C’以及尾部要不要加一个’A’;
    看看符不符合长度要求;
    符合长度要求;
    就根据ac个数,以及两个字符串的头尾,递推到s[k];
    得到s[k]的ac个数;
    是x的话就输出结果;
    (空出来的部分用’X’填就好)

    【Number Of WA

    1

    【完整代码】

    #include <bits/stdc++.h>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define ms(x,y) memset(x,y,sizeof x)
    #define Open() freopen("F:\rush.txt","r",stdin)
    #define Close() ios::sync_with_stdio(0),cin.tie(0)
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
    const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
    const double pi = acos(-1.0);
    const int N = 110;
    
    LL k,x,n,m;
    
    LL check2(int now,LL ac1,LL ac2,int st1,int en1,int st2,int en2){
        if (ac2>x) return ac2;
        if (now==k) return ac2;
        return check2(now+1,ac2,ac1 + ac2 + ( (en1 && st2)?1:0),st2,en2,st1,en2);
    }
    
    bool check(LL ac1,LL ac2,int st1,int en1,int st2,int en2){
        if (ac1*2 + st1 + en1>n) return false;
        if (ac2*2 + st2 + en2>m) return false;
        if (check2(2,ac1,ac2,st1,en1,st2,en2)==x) return true;
        return false;
    }
    
    string create(int ac,int st,int en,int len){
        string s;
        s.resize(len);
        int l = 0;
        if (st) s[l++] = 'C';
        if (en) s[--len] = 'A';
        while (ac--){
            s[l++] = 'A';
            s[l++] = 'C';
        }
        while (l<len) s[l++] = 'X';
        return s;
    }
    
    int main(){
        //Open();
        Close();
        cin >> k >> x >> n >> m;
        rep1(ac1,0,n/2)
            rep1(ac2,0,m/2)
                rep1(i,0,15)
                if (check(ac1,ac2,(i&1)>0,(i&2)>0,(i&4)>0,(i&8)>0)){
                    cout << create(ac1,(i&1)>0,(i&2)>0,n) << endl;
                    cout << create(ac2,(i&4)>0,(i&8)>0,m) << endl;
                    return 0;
                }
        cout <<"Happy new year!"<<endl;
        return 0;
    }
    
  • 相关阅读:
    2.1求二进制数中1的个数
    SQL学习笔记八:SQL Server陷阱
    SQL学习笔记之三:系统表syscommnets
    SQL学习笔记之二:QUOTENAME函数
    SQL学习笔记五:脚本创建角色、用户以及相关操作
    输入表名生成插入、更新存储过程和调用该存储过程的字符串
    没有注意过的count(0),count(1),count(*),count(列名)
    清除开始文档批处理
    SQL学习笔记七:利用脚本附加数据库
    SQL学习笔记六:关于全备/差异/日志备份的恢复
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626263.html
Copyright © 2011-2022 走看看