zoukankan      html  css  js  c++  java
  • 4.29 每日一题题解

    小 C 的 01 序列

    涉及知识点:

    • 递推

    solution:

    • (从1月29到今天,每日一题已经和大家陪伴了整整一个季度,继续加油吧,各位~)
    • (这道题的做法很多,简述个人的做法)
    • (先看一下前4项:)
    • (0)
    • (01)
    • (0110)
    • (01101001)
    • (发现每一项的前半部分等于上一项,后半部分等于前半部分取反)
    • (那递推式就很好写了:)
    • (00的个数 = 上一项00的个数+上一项11的个数)
    • (01的个数 = 上一项01的个数+上一项10的个数)
    • (10的个数 = 上一项10的个数+上一项01的个数)
    • (11的个数 = 上一项11的个数+上一项00的个数)
    • (写完发现还是少了点什么,举个例子,0110,我们只统计了01和10,漏掉了中间的11)
    • (所以少算的那一部分就是最中间新增的11)
    • (多写几项不难发现,当n为偶数,最中间的是11,n为奇数,最中间的是01)

    std:

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    const ll mod = 998244353;
    const int maxn = 1e5 + 5;
    ll f[maxn][4];
    int main(){
        int n;
        cin>>n;
        f[1][1] = 1;
        for(int i=2;i<=n;i++){
            f[i][0] = (f[i-1][0] + f[i-1][3])%mod;
            f[i][1] = (f[i-1][1] + f[i-1][2])%mod;
            f[i][2] = (f[i-1][2] + f[i-1][1])%mod;
            f[i][3] = (f[i-1][3] + f[i-1][0])%mod;
            if(i%2 == 0)
                f[i][3] += 1;
            else
                f[i][1] += 1;
        }
        for(int i=0;i<4;i++)
            cout<<f[n][i]<<" ";
        cout<<endl;
        return 0;
    }
    
  • 相关阅读:
    除法
    01.python对象
    00.基础入门
    00.斐波那契数列第n项
    16.分治排序
    15.快速排序
    14.插入排序--希尔排序(缩小增量排序)
    13.插入排序--直接插入排序(简单插入排序)
    12.选择排序
    11.冒泡排序
  • 原文地址:https://www.cnblogs.com/QFNU-ACM/p/12799804.html
Copyright © 2011-2022 走看看