A、牛牛打怪兽



/**
 * struct Point {
 *    int x;
 *    int y;
 * };
 */
#pragma GCC target("avx,sse2,sse3,sse4,popcnt")
#pragma GCC optimize("O2,O3,Ofast,inline,unroll-all-loops,-ffast-math")
const int N = 1e5+7;
vector<int> e[N];
int F[N],tmp[N],fa[N],son[N],cnt;

void dfs1(int x,int y){
    son[y]=x;
    fa[x]=y;
    for(auto it:e[x]){
        if(it==y)    continue;
        dfs1(it,x);
    }
}

void dfs2(int x,int y){
    tmp[x]=tmp[fa[x]]+F[x];
    for(auto it:e[x]){
        if(it==y) continue;
        dfs2(it,x);
    }
    if(son[x]==0 and tmp[x]<=2)    ++cnt;
}

class Solution {
public:
    /**
     * 返回牛牛能到达终点且不被淘汰的路径数
     * @param n int整型 
     * @param Edge Point类vector 
     * @param f int整型vector 
     * @return int整型
     */
    int solve(int n, vector<Point>& Edge, vector<int>& f) {
        // write code here
        memset(son,0,sizeof son);
        memset(fa,0,sizeof fa);
        memset(tmp,0,sizeof tmp);
        for(int i=1;i<=n;++i)    e[i].clear();
        for(auto it:Edge){
            int u=it.x,v=it.y;
            e[u].push_back(v);
            e[v].push_back(u);
        }
        for(int i=0;i<n;++i)
            F[i+1]=f[i];
        dfs1(1,0);
        cnt=0;
        dfs2(1,0);
        return cnt;
    }
};

B、牛牛的冰激凌








class Solution {
public:
    /**
     * 两个数表示答案
     * @param n int整型 一次运输的冰激凌数量
     * @param m int整型 总冰激凌数
     * @param t int整型 一次运输的时间
     * @param c int整型一维数组 表示每个冰激凌制作好时间<1e4
     * @param cLen int c数组长度
     * @return int整型vector
     */
    vector<int> icecream(int n, int m, int t, int* c, int cLen) {
        // write code here
        int st = m % n;
        if(!st)    st = n;
        sort(c,c+cLen);
        int ans = -t;
        for(int i=st-1;i<m;i+=n){
            ans += t;
            ans = max(ans,c[i]);
            ans += t;
        }
        return {ans, m / n + (m%n!=0)};
    }
};

C、数列求值



class Solution {
public:
    /**
     * 输出序列的第n项
     * @param n long长整型 序列的项数
     * @param b long长整型 系数
     * @param c long长整型 系数
     * @return long长整型
     */
    int mod = 1e9 + 7;
    typedef long long ll;

    struct Node {
        ll matrix[2][2];//结构体中的矩阵
        int mod = 1e9 + 7;
        Node() {//默认构造函数
            memset(matrix, 0, sizeof(matrix));
        }
        void one() {//单位矩阵
            for (int i = 0; i < 2; ++i)
                matrix[i][i] = 1;
        }
        Node operator*(Node other) {//矩阵运算重载*运算符
            Node ans;//记录乘积
            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 2; j++)
                    for (int k = 0; k < 2; k++) {
                        ans.matrix[i][j] += matrix[i][k] * other.matrix[k][j];
                        ans.matrix[i][j] %= mod;
                    }
            return ans;
        }
    };
    Node power(Node a, ll b) {//快速幂求a的b次方
        Node res;
        res.one();//单位矩阵
        while (b) {
            if (b & 1)
                res = res * a;
            a = a * a;
            b >>= 1;
        }
        return res;
    }
    long long nthElement(long long n, long long b, long long c) {
        // write code here
        if(n==0)    return 0;
        if(n==1)    return 1;
        Node temp;
        temp.matrix[0][0] = b;
        temp.matrix[0][1] = c;
        temp.matrix[1][0] = 1;
        temp.matrix[1][1] = 0;
        Node ans = power(temp, n - 1);
        return ans.matrix[0][0];
    }
};