首页 > 其他分享 >[ARC133E] Cyclic Medians 题解

[ARC133E] Cyclic Medians 题解

时间:2024-10-22 16:47:44浏览次数:7  
标签:frac int 题解 Medians ARC133E res cr ns mod

一点不会套路。

思路

对于中位数相关,发现我们不好直接表示与中位数有关的内容。

不妨枚举 \(x\),把大于 \(x\) 的标为 \(1\),小于等于 \(x\) 的标为 \(0\),这样把所有最终为一的方案数加起来就是原来的答案。

大概是这样一个东西:

\[k=\sum_{i=0}^k [i<k] \]

这个怎么求呢。

发现若一组 \((x,y)\) 是 \((1,1)\) 或者是 \((0,0)\) 的话,后面的东西就与 \(a\) 无关了。

继续思考,在 \(x=i\) 与 \(x=v-i\) 的时候,出现 \((0,0)\) 的概率和 \((1,1)\) 的概率恰好是相反的。

这告诉我们,我们只需要求出只出现 \((0,0)\) 与 \((1,1)\) 的方案,在这些方案中,最后为 \(1\) 与最后为 \(0\) 的概率是相等的。

所以我们只要求出只出现 \((0,0)\) 与 \((1,1)\) 的方案。

这个也不好求。

使用容斥,我们求出每一组 \((x,y)\) 都要求 \(x\not =y\) 的方案。

这个东西依据经典结论,这个两个序列各会被分成 \(\gcd(n,m)\) 份,每一份都要求相等,并且与另一个序列是一一对应的关系。

所以当你枚举 \(x\) 的时候,方案数为:

\[(x^\frac{n}{g}(v-x)^\frac{m}{g}+(v-x)^\frac{n}{g}x^\frac{m}{g})^g \]

其中,\(g=\gcd(n,m)\)。

然后就做完了。

时间复杂度:\(O(v\log n)\)。

Code

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int mod = 998244353;

int n, m, v, a, g;

inline int power(int x, int y) {
  int res = 1;
  while (y) {
    if (y & 1) res = res * x % mod;
    x = x * x % mod, y >>= 1;
  }
  return res;
}

signed main() {
  cin >> n >> m >> v >> a, g = __gcd(n, m);
  int sm = power(v, n + m);
  int ns = 0;
  n /= g;
  m /= g;
  for (int i = 0; i <= v; i++) {
    int nm = 0;
    nm += power(i, n) * power(v - i, m);
    nm += power(v - i, n) * power(i, m);
    nm = power(nm % mod, g);
    if (a > i) ns = ns + nm;
    int cr = sm - nm;
    if (cr < 0) cr += mod;
    if (cr & 1) cr += mod;
    cr = cr / 2;
    ns = ns + cr;
  }
  cout << ns % mod << "\n";
}

标签:frac,int,题解,Medians,ARC133E,res,cr,ns,mod
From: https://www.cnblogs.com/JiaY19/p/18493283

相关文章

  • Public NOIP Round #7 T3 黑白棋子 题解
    Description有一棵\(n\)个点的树,顶点的编号为\(1\)到\(n\)。对于树中的每个顶点,可能存在一个白色的棋子、一个黑色的棋子,或者没有棋子。树上正好有\(w\)个白色棋子和\(b\)个黑色棋子。另外,对于每一对具有相同颜色棋子的顶点,存在一条路径,路径上的每个顶点都包含相同颜色......
  • AT_agc064_c [AGC064C] Erase and Divide Game 题解
    先考虑所有\(l_i=r_i\)时怎么做,可以建出反向Trie树,问题转化为从根开始每次向左子树或右子树走,第一个拿到空子树的人输,直接在Trie上dp即可。考虑从叶子层开始对每一层的点合并两个子树的dp值,发现每一层值相同的连续段是较少的。于是可以维护这些连续段,每次合并要将每个......
  • 洛谷P2596 [ZJOI2006] 书架 题解 splay tree 模板题
    题目链接:https://www.luogu.com.cn/problem/P2596主要涉及的操作就是:找到某一个编号的点(这个操作可以不用splaytree维护)删除某个点将某一个点插入到最前面,最后面,或者某一个位置查询前序遍历为\(k\)的节点编号因为每次删除都会又把这个点加回去,所以可以复用\(n\)个......
  • [题解]CF825E Minimal Labels
    LPhang为什么是神?思路显然可以想到一个错误的贪心:直接拓扑排序,每一次选择当前可以拓展的点中最小的元素进行编号。由于可能存在一个值较小的元素被藏在一个较大的元素后面,这种贪心就会出问题。出问题的本质原因就是我们希望字典序最小,就得使得越小的位置分配到更小的值。不妨......
  • 历年CSP-J初赛真题解析 | 2017年CSP-J初赛完善程序(27-36)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客(快速幂)请完善下面的程序,该程序使用分治法求x......
  • CF2023D Many Games 题解
    赛时被创四了。思路考虑我们什么时候合并会比原来优。例如,我们现在要合并\(p_1,w_1\)和\(p_2,w_2\),同时保证,\(w_1\gew_2\)。那么有:\[\frac{p_1}{100}\timesw_1\le\frac{p_1}{100}\times\frac{p_2}{100}\times(w_1+w_2)\]\[\frac{p_2}{100}\timesw_2\le\frac{p_1}{......
  • 01 Eclipse使用Maven慢的问题解决
    1.Eclipse使用的是内置的MavenEclipse有可能使用了内置的Maven,而不是独立安装的Maven。如果使用Eclipse内置的Maven,默认的settings.xml可能并未生成。你可以按以下步骤检查或修改Maven设置路径:a.检查Eclipse使用的Maven配置点击Window->Preferences在......
  • 【题解】Solution Set - NOIP2024集训Day58 字符串
    【题解】SolutionSet-NOIP2024集训Day58字符串https://www.becoder.com.cn/contest/5658「CF1466G」SongoftheSirens考虑对于\(s_i\),算钦定必须覆盖到\(t_i\)的匹配个数\(f_i\)。注意到\(s\)每次长度都会\(\times~2\)左右,其长度在\(O(\log|w|)\)的时候就......
  • noi.ac775题解
    Gameb文件OI:gameb时限:1000ms空间:512MiBAlice和Bob正在玩一个游戏。具体来说,这个游戏是这样的,给定一个数列,从Alice开始,两个人轮流操作,每次操作可以从数列的头部或者尾部删去一个数字,当这个数列满足一定条件的时候,最后一次操作的人获胜。如果一开始就满足条......
  • ZZJC新生训练赛第七场题解
    难度分类(同一难度下按字典序上升)入门:C简单:G,D中等:E,H,F,A困难:BC-解题思路数一下每个字母的数量看是不是偶数就可以得到答案。C-代码实现#include<bits/stdc++.h>intmain(){std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout......