首页 > 其他分享 >Codeforces Educational Codeforces Round 136 C D

Codeforces Educational Codeforces Round 136 C D

时间:2022-10-04 17:45:29浏览次数:47  
标签:结点 int mid Educational 张牌 Codeforces 136 cnt Alice

C

一开始没有读懂题意,以为是轮流游戏,看别人翻译才发现先手在下一轮会变为反手,导致搞了半天过不了样例。

可以知道如果\(n\)这张牌在Alice手中,则Alice先手打出这张牌必胜。
如果\(n\)这张牌不在Alice手中:
1.\(n-1\)这张牌在Alice手中,那么可以打出\(n-1\)这张牌,Bob相应打出\(n\)这张牌,转化为\(n-2\)时的问题。
2.\(n-1\)这张牌在Bob手中,那么Bob只需要先打出\(n-1\),再先手打出\(n\)即可必胜。

设有\(i\)(\(i\)为偶数)张牌时Alice先手获胜的方案数为\(f_i\),后手获胜的方案数为\(g_i\),
那么有递推方程:
\(f_i = C(i - 1, i / 2 - 1) + g_{i-2}\)
\(g_i = C(i - 2, i / 2 - 2) + f_{i-2}\)
平局的方案仅有一种:Alice手中的牌大小都为奇数,Bob手中的牌大小全为偶数。

void solve() {
    ll n; cin >> n;
    ll a = 0, b = 0, cnt = 1;
   	for (int i = n;i > 2;i -= 2) {
   		if (cnt & 1) a = (a + C(i - 1, i / 2 - 1)) % mod;
   		else a = (a + C(i - 2, i / 2 - 2)) % mod;
   		cnt ++;
   	}
   	if (cnt & 1) a = (a + 1) % mod;
   	b = C(n, n / 2) - a - 1;
    cout << a << ' ' << (b + mod) % mod << " 1\n";
}

E

给定一颗有\(n\)个结点的有根树,\(1\)号结点为根结点,至多进行\(k\)次操作。
每次操作可以把一棵子树的父亲结点接到\(1\)号点,作为\(1\)号结点的儿子。
问树的深度最小是多少?

(二分答案 + 贪心)
二分答案\(mid\)之后,从下往上记录深度,如果一个结点的深度等于\(mid-1\),但他的父亲不是\(1\)号结点,则至少需要一次操作将其接到\(1\)号结点以满足深度不超过\(mid\)的要求。

void solve() {
    int n, k, cnt = 0; cin >> n >> k;
    vector<int> g[n + 1], f(n + 1);
    for (int i = 2;i <= n;i++) {
    	int p; cin >> p;
        f[i] = p;
    	g[p].pb(i);
    }
    function<int(int, int)> dfs = [&](int x, int m) {
        int h = 1;
    	for (auto y : g[x]) {
    		h = max(h, dfs(y, m) + 1);
    	}
        if (h == m && f[x] > 1) {
            //cout << x << endl;
            cnt ++;
            h = 0;
        }
    	return h;
    };
    auto check = [&](int x) {
    	cnt = 0;
    	dfs(1, x);
    	return cnt > k ? false : true;
    };
    int l = 1, r = n + 1;
    while (l < r) {
    	int mid = (l + r) >> 1;
    	if (check(mid)) r = mid;
    	else l = mid + 1;
    }

    cout << r << endl;
}

标签:结点,int,mid,Educational,张牌,Codeforces,136,cnt,Alice
From: https://www.cnblogs.com/coldarra/p/16754125.html

相关文章

  • Codeforces Round #824 (Div. 2)
    CodeforcesRound#824(Div.2)A#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#defineendl'\n'usingnamespacestd;intt,n;inlin......
  • Codeforces Round #824赛时情况&赛后总结
    前两天的CF到今天才总结,还是太鸽了呢赛时首先看了题目,由于英语障碍,我还在看A题时,YSC就已经A了(我还是太逊了)。看懂后,发现A是道水题(正常),快速切掉。随后看B,阅读倒没什么障......
  • Codeforces Global Round 22
    题目链接这场彻底打崩了,只做了A,B,C,可以看出我离退役已经不远力!A.GloryAddictstrash题不写。感觉出得很没意思。B.PrefixSumAddicts用\(s_{n-k+1}\sims_n\)......
  • 【ARC136E】Non-coprime DAG(分类讨论)
    Non-coprimeDAG题目链接:ARC136E题目大意有一个n个点的有向图,i有连向j的边当且仅当i<j而且gcd(i,j)>1。然后给你每个点的点权,你要选一些点,使得任意两个点之间......
  • CodeForces 1455G Forbidden Value
    洛谷传送门CF传送门小清新动态开点线段树优化dp题。首先题目中的if嵌套看起来就很烦,可以考虑建树,外面再套一层大的if0...end,这样就将本题转化成一个树上问题。......
  • Codeforces Round #823 (Div. 2) A-D
    比赛链接A题解知识点:贪心。对于一个轨道,要么一次性清理,要么一个一个清理。显然,如果行星个数大于直接清理的花费,那么选择直接清理,否则一个一个清理。即\(\sum\min(c,......
  • LeetCode 1367. Linked List in Binary Tree
    原题链接在这里:https://leetcode.com/problems/linked-list-in-binary-tree/题目:Givenabinarytree root anda linkedlistwith head asthefirstnode. Ret......
  • codeforces/AtCoder补题整理
    目录cf1738CEvenNumberAddicts(博弈/记忆化搜索)题意题解cf1739EResetKEdges(树,二分+贪心)题意题解cf1730DPrefixesandSuffixes(字符串,思维)题意题解cf1734DS......
  • Codeforces Global Round 22 C. Even Number Addicts(博弈论)
    https://codeforces.com/contest/1738/problem/C题目大意:给定n个数字,Alice先手,Bob后手;拿完之后,Alice数字总和为奇数时Alice获胜,否则Bob获胜。问我们给定n个数字,双方......
  • Dashboard - Codeforces Round #824 (Div. 2) - Codeforces
    Dashboard-CodeforcesRound#824(Div.2)-Codeforces1.Problem-A-Codeforces考虑第一部分只取一天然后第二部分取1/3,最后一天取剩下的。然后再中间的增大,第三......