[AGC030D] Inversion Sum】的更多相关文章

传送门--Codeforces 传送门--Atcoder 考虑逆序对的产生条件,是存在两个数\(i,j\)满足\(i < j,a_i > a_j\) 故设\(dp_{i,j}\)表示\(a_i>a_j\)的概率,每一次一个交换操作时\(O(n)\)地更新即可. AGC030D就在模意义下运算,最后就乘上\(2^Q\)就行了 看着好简单啊就是想不到 #include<iostream> #include<cstdio> #include<cstdlib>…
「AGC030D」Inversion Sum 传送门 妙啊. 由于逆序对的个数最多只有 \(O(n^2)\) 对,而对于每一个询问与其相关的逆序对数也最多只有 \(O(n)\) 对,我们可以对于每一对数分别考虑其贡献. 然后你发现直接算所有情况的和非常麻烦,所以我们可以先算出所有情况的期望逆序对数,即每一对为逆序对的概率之和,然后乘上 \(2^q\). 那这就非常 easy 了. 就每次对于有关联的两对取一个平均值就完事了. /*---Author:HenryHuang---*/ /*---Ne…
题目大意 有一个序列 \(a_1,a_2,\ldots,a_n\),有 \(q\) 次操作,每次操作给你两个数 \(x,y\),你可以交换 \(a_x,a_y\),或者什么都不做. 问你所有 \(2^q\) 种情况中逆序对的个数之和. \(n,q\leq 3000\) 题解 考虑对于每一对 \(i,j\),计算 \(q\) 次操作后 \(a_i\) 和 \(a_j\) 的大小关系. 记 \(f_{i,j,k}\) 为操作 \(i\) 次后,\(a_j,a_k\) 这对数中较小的在 \(j\),较…
题目链接 \(Description\) 给定长为\(n\)的序列\(A_i\)和\(q\)次操作\((x,y)\).对于每次操作\((x,y)\),可以选择交换\(A_x,A_y\)两个数,也可以选择不进行操作.求所有\(2^q\)种情况中,逆序对个数之和. \(n,q\leq3000\). \(Solution\) 不去直接求和,我们求\(q\)次操作后逆序对的期望个数.这样乘上\(2^q\)就是答案. 可以令\(f[t][i][j]\)表示,\(t\)次操作后,\(A_i<A_j\)的概率…
前言 \(\text{CPS-S2020}\) 已然临近,而 \(\text{DP}\) 作为联赛中的常考内容,是必不可少的复习要点,现根据教练和个人刷题,整理部分好题如下(其实基本上是直接搬--). CF515C Drazil and Factorial 题目大意 定义 \(F(x)=\sum_{i=0}^{10^i<=x} ((x/10^i) \mod 10) !\) . 给定一个十进制数 \(a\),共由 \(n\) 个数字组成.要找到最大正数 \(x\) ,满足以下两个条件: \(x\)…
第一次套刷AtCoder 体验良好 传送门 Poisonous Cookies cout<<b+min(c,a+b+); Tree Burning 难度跨度有点大啊 可以证明当第一次转向之后,接下来每次的方向都和前一次相反 因为转向后再往相同方向走一定不如初始就往该方向走然后转两次向 枚举初始往哪个方向走以及走几步,前缀和优化即可 #include<ctime> #include<cmath> #include<cstdio> #include<cst…
A - Poisonous Cookies 题意 有\(A\)个能解毒的普通饼干,\(B\)个能解毒的美味饼干,\(C\)个有毒的美味饼干,求最多能吃多少个美味饼干,每次吃完有毒的饼干后要解毒后才能继续吃. 题解 输出\(\text{min(A + B + 1, C) + B}\)即可. 代码 #include <bits/stdc++.h> using namespace std; int main() { int a, b, c; cin >> a >> b >…
A - Poisonous Cookies 有毒还吃,有毒吧 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter putchar('\n') #define MAXN 100005 #define e…
A - Poisonous Cookies 签到. #include <bits/stdc++.h> using namespace std; #define ll long long ll a, b, c; int main() { while (scanf("%lld%lld%lld", &a, &b, &c) != EOF) { ) printf("%lld\n", b + c); ); } ; } B - Tree Bur…
1. 3721 Smuggling Marbles 大意: 给定$n+1$节点树, $0$为根节点, 初始在一些节点放一个石子, 然后按顺序进行如下操作. 若$0$节点有石子, 则移入盒子 所有石子移向父亲节点 把所有不少于$2$个石子的节点的石子丢掉 若树上还有石子,则返回第一步 对于所有$2^{n+1}$种初始放石子的方案, 求出最后盒子中石子总数之和. 长链剖分, 这道以后再写 2. 3727 Prefix-free Game 两个串$s,t$合法要满足 $s$不为$t$的前缀且$t$不为…