Intercity Travelling CodeForces - 1009E (组合计数)

大意: 有一段$n$千米的路, 每一次走$1$千米, 每走完一次可以休息一次, 每连续走$x$次, 消耗$a[1]+...+a[x]$的能量. 休息随机, 求消耗能量的期望$\times 2^{n-1}$.

 

简单计数题, 枚举每种长度的贡献.

#include <iostream>
#include <algorithm>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;
typedef long long ll;
const int P = 998244353, INF = 0x3f3f3f3f;

const int N = 1e6+10;
int n,a[N],po2[N];

int main() {
	scanf("%d", &n);
	REP(i,1,n) scanf("%d", a+i),(a[i]+=a[i-1])%=P;
	if (n==1) return printf("%d\n",a[n]),0;
	if (n==2) return printf("%d\n",2*a[1]+a[2]),0;
	po2[0] = 1;
	REP(i,1,n) po2[i] = po2[i-1]*2ll%P;
	int ans = a[n];
	REP(i,1,n-1) ans = (ans+((n-i-1ll)*po2[n-i-2]%P+2ll*po2[n-i-1])*a[i])%P;
	printf("%d\n", ans);
}

 

转载于:https://www.cnblogs.com/uid001/p/11185436.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值