首页 > 其他分享 >Codeforces Round #818 (Div. 2) D Madoka and The Corruption Scheme

Codeforces Round #818 (Div. 2) D Madoka and The Corruption Scheme

时间:2022-09-03 17:24:47浏览次数:86  
标签:Madoka ll ans Codeforces up 权值 include Round mod

Madoka and The Corruption Scheme

组合数 + 思维 + 贪心

首先要思考一开始要如何摆放才是最优秀的

按照完全二叉树(根就是最后赢的那个),给所有的点赋予权值,代表需要转换多少条边,才能使得这个点的数字被选上

显然假设当前点的权值为 \(x\),该点的其中一个节点权值必然为 \(x\)(获胜),另一个点的权值必然是 \(x + 1\)(失败)

图中点的数字代表其权值,贪心地想,我们肯定要将小的数字尽可能的放置在权值低的点上(叶子),让别人尽可能的拿不到大的数字

通过观察发现,每一层的权值的种类与数量是杨辉三角的样子,所以如果能改 \(k\) 次,就相当于第 \(n\) 层的前 \(k\) 个值的和,都可以被调整为最终的胜利者

层 \ 点数量 \ 点权值 0 1 2 3
0 1
1 1 1
2 1 2 1
3 1 3 3 1

第一列代表层数,第一行代表点权值,\(a_{ij}\) 代表第 \(i\) 层,权值为 \(j\) 的点个数

其实,因为每个点都会引申出一个本身权值,以及本身权值加一的点,显然就是杨辉三角了

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <functional>
#include <map>
#include <set>
#include <cmath>
#include <cstring>
#include <deque>
#include <stack>
#include <ctime>
#include <cstdlib>
using namespace std;
typedef long long ll;
#define pii pair<int, int>
const ll maxn = 2e5 + 10;
const ll inf = 1e17 + 10;
const ll mod = 1e9 + 7;
ll fac[maxn], invfac[maxn];

ll qpow(ll x, ll n)
{
    ll ans = 1;
    while(n)
    {
        if(n & 1) ans = ans * x % mod;
        n >>= 1;
        x = x * x % mod;
    }
    return ans % mod;
}

ll cal(ll up, ll down)
{
    if(up == down || up == 0) return 1;
    ll ans = fac[down] * invfac[up] % mod;
    return ans * invfac[down - up] % mod;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n, k;
    cin >> n >> k;
    fac[0] = 1;
    for(int i=1; i<=n; i++) fac[i] = fac[i - 1] * i % mod;
    invfac[n] = qpow(fac[n], mod - 2);
    for(int i=n-1; i>=0; i--) invfac[i] = invfac[i + 1] * (i + 1) % mod;
    ll ans = qpow(2, n);
    if(k < n)
    {
        ans = 0;
        for(int i=0; i<=k; i++)
            ans += cal(i, n);
    }
    cout << ans % mod << endl;
    return 0;
}

标签:Madoka,ll,ans,Codeforces,up,权值,include,Round,mod
From: https://www.cnblogs.com/dgsvygd/p/16653082.html

相关文章

  • Codeforces Round #818 (Div. 2)
    CodeforcesRound#818(Div.2)D.MadokaandTheCorruptionScheme题目大意给定一场比赛,有\(2^n\)个参赛者。赞助商有k次机会可以调整某一局的结果。而我们想要知道......
  • Codeforces Round #719 (Div. 3) E. Arranging The Sheep(字符串)
    https://codeforces.com/contest/1520你在玩“放羊”游戏。这个游戏的目标是让羊排好队。游戏中的关卡由一个长度为n的字符串描述,由字符“.”组成(空格)和'*'(羊)。......
  • Codeforces Round #818 (Div. 2) C Madoka and Formal Statement
    MadokaandFormalStatement思维如果合法,说明\(a_i\leb_i\),因此也可以认为\(b_i\)就是\(a_i\)最后能变成的最大值根据题意操作,只有\(a_i\lea_{i+1}\)的情况......
  • Codeforces Round #818 (Div. 2) B Madoka and Underground Competitions
    MadokaandUndergroundCompetitions构造在一行里,如果选定了其中一个位置是\(X\),接下来就直接往左和往右每\(k\)个放置一个\(X\)就行了每一行的初始位置根据一开......
  • Codeforces Round #818 (Div. 2) A Madoka and Strange Thoughts
    MadokaandStrangeThoughts唯一分解定理\[gcd(a,b)=p_1^{min(ak_1,bk_1)}*p_2^{min(ak_2,bk_2)}...\]\[lcm(a,b)=p_1^{max(ak_1,bk_1)}*p_2^{max(ak_2,......
  • *Codeforces Round #651 (Div. 2) C. Number Game(博弈论)
    https://codeforces.com/contest/1370/problem/CAshishgup和FastestFinger玩游戏。他们从数字n开始,轮流玩。在每个回合中,玩家可以进行以下任意一个动作:将n除以任何大......
  • Educational Codeforces Round 123 D
    D.CrossColoring很容易想到的就是分成几个块有几个就是k多少次幂但是显然暴力的做法是n2的我们考虑如何优化我们考虑对每一行这个x[i]能成立的条件是啥那就是y[i]......
  • Educational Codeforces Round 123 E
    E.ExpandthePath我们画出一个合法的一般性的来研究比如RDRDR我们可以将其任意一个往下往右延长但是这个图形获得的面积是不规则的但是我们知道合法的序列肯定是......
  • Codeforces Round #814 (Div. 2)
    Preface关于军训……它死了第一次感觉到疫情的好处,就是不知道训了一半给不给学分,要不要补训一直打隔膜颓废也不是办法,因此来写写题(才不是因为路由器没到舍不得用流量更......
  • Educational Codeforces Round 134 (Rated for Div. 2) D Maximum AND
    MaximumAND贪心从高位开始,尽可能地让\(a\)中该位为\(0\)的和\(b\)中该位为\(1\)的配对在一起,换句话说,可以让\(a\)由小到大排序,\(b\)由大到小排序如果当......