Codeforces Round 926 (Div. 2)

C:Sasha and the Casino

类似于倍投法,就是在一赔一的情况下,第一次压一块钱,每输一次就押注上一次两倍的金额.

假如资金无限的话,这种方法赢的期望为无穷大.原理类似于二进制,不论你输再多次,只要赢一次总额就增加了1.比如 15 二进制1111,前3把一直输,但是只要第4把赢,就一定可以增加 1 资金.

本题大概也就是这样,假设已经输了s,那么这一把至少要投资多少才可以把之前输的全部赚回来,假设为c ,那么也就是 k*c> s+c , 变形一下就是 c> , 这里我们下取整 再加上1 即可.

那么我们只需要判断资金是否充足即可。

复制代码
void solve()
{
    int k, x, a;
    cin >> k >> x >> a;
    int s = 1;
    for (int i = 1; i <= x; i++)
    {
        int t = s / (k - 1) + 1;
        s += t;
        if (s > a)
        {
            cout << "NO" << endl;
            return;
        }
    }
    cout << "YES" << endl;
}

D:Sasha and a Walk in the City

题意: 计算不存在三点在一条线上的点集的数量.反正体面是有点抽象。。

思路:我们考虑树形dp,一般先看单一的树与子树进行分析

一种是从每个叶节点到根结点形成的链上最多只有一个特殊点,用 f [ x ]保存,还有一种就是有存在两个关键点的链,用 dp[x] 保存

那么对于以 x 为根的子树,如果不选择 x 为关键点:

1.第一种情况下因为每条链上只有一个关键点,那么经过 x 的路径一定不会包含第三个关键点, x子树的所有情况可以随意组合,直接将所有子树的 f 乘起来即可

2.第二种情况下,如果 x 的一棵子树存在这样一条链,其他子树的任意节点都不能成为关键点,只能是空白一种情况,所以把所有子树dp相加

如果选择 x 成为关键点的话,子树一定不能含链,分为两种情况:

1.除了 x 均为空白,符合第一种情况,这样只有一种

2.对于一颗子树的所有不含链(也就是最多一个点)且不为空白的可能(即为 f[son]−1 ),加上 x 会构成若干条链,此时其余子树应均为空白。

两种情况相加有

初始化的时候,f[i]=1,叶节点为2

复制代码
int f[N], dp[N];
vector<int> g[N];
void dfs(int u, int fa)
{
    for (auto ed : g[u])
    {
        if (ed == fa)
            continue;
        dfs(ed, u);
        f[u] = ((f[u] * f[ed]) % mod + mod) % mod;
        dp[u] = (dp[u] + dp[ed] + f[ed] - 1) % mod;
    }
    f[u]++;//对于叶节点可以使其变为2,对于其他带f[u]可以加上1
    f[u] %= mod;
}
void solve()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        g[i].clear();
        f[i] = 1;
        dp[i] = 0;
    }
    for (int i = 1; i <= n - 1; i++)
    {
        int a, b;
        cin >> a >> b;
        g[a].pb(b);
        g[b].pb(a);
    }
    dfs(1, -1);
    int ans = f[1] + dp[1];
    cout << f[1] << endl;
    cout << (ans % mod + mod) % mod << endl;
}
相关推荐
罗湖老棍子22 分钟前
花神游历各国(信息学奥赛一本通- P1550)(洛谷-P4145)
数据结构·算法·线段树·势能数·区间开平方根 区间查询
Mr_Xuhhh23 分钟前
LeetCode 热题 100 刷题笔记:数组与排列的经典解法(续)
算法·leetcode·职场和发展
qq_2837200540 分钟前
C++ 基础:STL 原理介绍 + 实用技巧
c++·stl·c·模板库
量子炒饭大师42 分钟前
【C++模板进阶】——【非类型模板参数 / 模板的特化 / 模板分离编译】
开发语言·c++·dubbo·模板·非类型模板·模板的特化·模板分离编译
炽烈小老头43 分钟前
【每天学习一点算法 2026/03/29】搜索二维矩阵 II
学习·算法·矩阵
靴子学长1 小时前
Qwen3.5 架构手撕源码
算法·架构·大模型
寒月小酒1 小时前
3.28 OJ
算法
白藏y1 小时前
【脚手架】Protobuf基础使用
c++·protobuf
南境十里·墨染春水1 小时前
C++笔记 构造函数 析构函数 及二者关系(面向对象)
开发语言·c++·笔记·ecmascript
AI成长日志1 小时前
【笔面试算法学习专栏】堆与优先队列专题:数组中的第K个最大元素与前K个高频元素
学习·算法·面试