zoukankan      html  css  js  c++  java
  • [USACO 2012 Feb B]Moo

    评测网址

    在这里插入图片描述在这里插入图片描述
    题意:
    某字符串由m o 两个字符构成
    而且构成的字符串为前一个字符串 + m + o * (i+2) + 前一个字符串 *(i+2)指的是数量
    问字符串第n个字符是什么
    思路:
    在从一个字符串构成下一个字符串的时候,是有一定的规律的,所以我们可以很轻松地找到规律
    然后就可以递归地找,满足规律的时候直接输出

    ll a[maxn], n;
    char ans[5] = {'m', 'm', 'o', 'o'};
    void f(ll num) {
        int pos = 0;
        if(num <= 3) {
            cout << ans[num] << endl;
            return ;
        }
        for(int i = 1; i <= 100; i++) {
            if(num < a[i]) {
                pos = i - 1;
                break;
            }
        }
        debug(pos);
        if(num  - a[pos] <= pos + 4) {
            if(num - a[pos] == 1) {
                puts("m");
                return ;
            } else {
                puts("o");
                return ;
            }
        } else
            f(num - a[pos] - pos - 4);
    }
    int main() {
        n = read;
        a[0] = 3;
        for(int i = 1; i <= 100; i++) {
            a[i] = a[i - 1] * 2 + i + 3;
        }
        for(int i=1;i<=4;i++){
            cout << a[i] << " ";
        }
        puts("");
        f(n);
        return 0;
    }
    /**
    
    
    **/
    
  • 相关阅读:
    STL常用容器☞String容器
    初识STL
    函数模板
    多态
    运算符重载
    友元
    对象的初始化和清理
    C++内存分区模型
    传值和传地址
    const的使用
  • 原文地址:https://www.cnblogs.com/PushyTao/p/15459813.html
Copyright © 2011-2022 走看看