首页 > 其他分享 >Atcoder Regular Contest 154 E - Reverse and Inversion

Atcoder Regular Contest 154 E - Reverse and Inversion

时间:2023-07-21 17:57:22浏览次数:38  
标签:Atcoder Inversion const Reverse limits int sum ret MOD

只要你发现是诈骗题就好办了。不要像我那样傻傻地瞪一个小时然后才发现那俩 sigma 里的东西相减是有性质的。

先考虑计算单个 \(f(p)\),一眼的树状数组……吗?考虑最终答案式子里 \(i\) 的系数:\(\sum\limits_{j<i}[p_j>p_i]-\sum\limits_{j>i}[p_j<p_i]\),因为 \(\sum\limits_{j<i}[p_j>p_i]+\sum\limits_{j<i}[p_j<p_i]=i-1\),\(\sum\limits_{j<i}[p_j<p_i]+\sum\limits_{j>i}[p_j<p_i]=p_i-1\),所以两者相减可以得到 \(\sum\limits_{j<i}[p_j>p_i]-\sum\limits_{j>i}[p_j<p_i]=i-p_i\)。于是 \(f(p)=\sum\limits_{i=1}^n(i^2-ip_i)\)。

\(\sum i^2\) 是定值。考虑计算 \(E(\sum ip_i)\)。发现一个很重要的性质:对于一个当前在位置 \(i\) 的数,只要下一次操作区间包含 \(i\),那么 \(\forall j\),下一步操作到达 \(j\) 的概率和到达 \(n-j+1\) 的概率是完全相同的。也就是说考虑一个位置 \(i\) 上的数 \(p_i\),如果其被操作至少一次,那么最终 \(p_i\) 所在位置的期望值就是 \(\dfrac{n+1}{2}\),因此最终 \(p_i\) 位置的期望值可以容易算出。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5;
const int MOD=998244353;
const int INV2=MOD+1>>1;
int qpow(int x,int e){int ret=1;for(;e;e>>=1,x=1ll*x*x%MOD)if(e&1)ret=1ll*ret*x%MOD;return ret;}
int n,m,p[MAXN+5],res;
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&p[i]);
	for(int i=1;i<=n;i++){
		int p0=1ll*(1ll*i*(i-1)/2+1ll*(n-i)*(n-i+1)/2)%MOD*qpow(1ll*n*(n+1)/2%MOD,MOD-2)%MOD;
		res=(res+1ll*i*i)%MOD;
		res=(res-(1ll*qpow(p0,m)*p[i]%MOD*i+1ll*(1-qpow(p0,m)+MOD)*p[i]%MOD*(n+1)%MOD*INV2)%MOD+MOD)%MOD;
	}printf("%d\n",1ll*res*qpow(1ll*n*(n+1)/2%MOD,m)%MOD);
	return 0;
}

标签:Atcoder,Inversion,const,Reverse,limits,int,sum,ret,MOD
From: https://www.cnblogs.com/tzcwk/p/arc154E.html

相关文章

  • Atcoder Regular Contest 124 E - Pass to Next
    首先第一步是一个浅显的观察:我们要求的是所有可能的最终序列的贡献之和,如果能改为计算所有操作序列的贡献之和那问题会简单很多,并且我们惊奇地发现,如果一组\(x_i\)全大于\(0\),那么把它们全减去\(1\)以后得到的答案序列不会改变,而对于任意一种可能的最终序列,必然存在一组\(\m......
  • 7. Reverse Integer
    7. ReverseIntegerMediumGivenasigned32-bitinteger x,return x withitsdigitsreversed.Ifreversing x causesthevaluetogooutsidethesigned32-bitintegerrange [-231,231 -1],thenreturn 0.Assumetheenvironmentdoesnotallowyou......
  • Atcoder Grand Contest 057 D - Sum Avoidance
    先来找些性质:\(A\)中最小的元素\(M\)肯定是最小的不是\(S\)的因子的数,由于\(\text{lcm}(1,2,3,\cdots,43)>10^{18}\),所以\(M\le43\)。对于每个\(0\lei<M\),\(\bmodM=i\)的数被选择的部分必然是一段后缀,因为如果你选择了\(M\)选择了某个\(\bmodM=i\)的数\(v\),......
  • AtCoder Grand Contest 049 E Increment Decrement
    洛谷传送门AtCoder传送门好题。同时考查了slopetrick和选手的计数能力,不愧是AGCE。先考虑问题的第一部分。你现在有一个初始全为\(0\)的序列\(b\)。你每次可以给\(b\)单点\(\pm1\),代价为\(1\),或区间\(\pm1\),代价为\(m\)。求把\(b\)变成给定序列\(a\)的......
  • AtCoder Beginner Contest 310
    A-OrderSomethingElse#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);intn,p,q;cin>>n>>p>>q;......
  • 【2023.07.14】Atcoder:past201912 - 第一回 アルゴリズム実技検定(div4+区域赛难度)过题
    G-Division解法一:位运算+状压枚举(赛时思路)范围显然,可以跑\(2^n\)的算法,考虑位运算状态压缩。以\(\mathcalO(2^n\cdot2^n)\)的复杂度分别枚举位于第一组、第二组中的人,随后计算每一种分组的快乐值,代码较长,赛时敲了半个小时,不过好在一发过了。总结:其实代码里面的剪枝完......
  • 题解 P5426 [USACO19OPEN]Balancing Inversions G
    来一篇简单易懂的良心题解。由于数值不是\(0\)就是\(1\),我们可以考虑将逆序对的统计方式化简。以左区间为例,设\(x\)为\(1\)的个数,\(p_i\)为第\(i\)个\(1\)的坐标,则逆序对个数为\(\sum\limits_{i=1}^{x}n-p_i-(x-i)\)。也就是\((n-x)\cdotx+\frac{x\cdot(x+1)}{......
  • freee Programming Contest 2023(AtCoder Beginner Contest 310)
    Preface打的就是依托答辩,当时看一眼D感觉是个爆搜不想写就先跳了去想F,结果傻逼了没想出来最后30min了赶紧溜回去把D爆搜写了,但是已经罚时爆炸了,其实如果正常正序做的话排名会挺稳的后面一问包大爷发现F是个傻逼题,只能说计数水平实在是低下A-OrderSomethingElse签到题#i......
  • AtCoder Beginner Contest 310
    PeacefulTeams\(n\)个运动员,要分成\(t\)个队伍,一共有\(m\)对人不能放在一支队伍里,求方案数,每支队伍至少需要有一个人\(1\leqt\leqn\leq10\)题解:DFS搜索通过数据范围考虑爆搜我们考虑枚举的顺序\(O(n!)\)我们对每个人\(c\)枚举将其加到当前的\(d\)支队伍中新开一......
  • AtCoder Regular Contest 092 E Both Sides Merger
    洛谷传送门AtCoder传送门Keyobservation:每个元素的下标奇偶性不改变。于是讨论最后一个数是下标为奇数还是偶数加起来的数。将下标奇偶性相同的元素分开考虑。对于下标奇偶性相同的元素,不难发现答案的上界是所有\(>0\)的元素之和(没有\(>0\)的元素时选一个最大的),并且一......