1009 E. Intercity Travelling



题意:一段路n个点,走i千米有对应的a[i]疲劳值。但是可以选择在除终点外的其余n-1个点休息,则下一个点开始,疲劳值从a[1]开始累加。休息与不休息等概率,设疲劳值总和的期望为p,求p*2n-1

思路:由于期望乘上了2n-1,所以数学意义就是求所有休息情况下的疲劳值总和。问题转化为,每种疲劳出现的次数Ni。网上题解大多数从组合数的角度计数,可能是我理解能力不够,总觉得讲的不太严谨,推导的过程略显随意,更多像是找规律的结果。琢磨了一会,觉得这样计数更容易理解:


对于疲劳a[1]而言,一个点就能出现。由于第一个点一定是a[1],则第一个点的a[1]的出现次数就是2n-1(后面的n-1个点任取,任取是指从a[1]开始还是接前一个的疲劳,2种情况)。而对于其余的任意一个点,出现a[1]的情况共2n-2种(第一个点固定是a[1],还剩n-2个点任取),这样的点有n-1个。故N1 = 2n-1+(n-1) * 2n-2.


对于疲劳a[2]而言,一次要选连续的两个点才能出现。如果选了1,2两点,那么剩下n-2个点任取,共2n-2。而且对于其余的任意连续两点,第一个点是不会变的,除去本身两个确定,还剩n-3个点任取,共2n-3种情况,这样的连续两点有n-2种。因此N2 = 2n-2 + (n-2) * 2n-3.


写到2就能推广到i:a[i]只能出现在连续的i个点下。于是分开讨论选连续的i个点里是否包含1,包含的话,共2n-i种情况,不包含则有2n-i-1种情况,这样的选法有n-i种。Ni = 2n-i + (n-i) * 2n-i-1.


答案就是∑(Ni * ai)。



代码:

#include<bits/stdc++.h>
#define dd(x) cout<<#x<<" = "<<x<<" "
#define de(x) cout<<#x<<" = "<<x<<"\n"
#define sz(x) int(x.size())
#define All(x) x.begin(),x.end()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> P;
typedef priority_queue<int> BQ;
typedef priority_queue<int,vector<int>,greater<int> > SQ;
const int maxn=1e6+10,mod=998244353,INF=0x3f3f3f3f;
ll a[maxn],pw[maxn];
void init()
{
pw[0]=1;
for (int i=1;i<maxn;++i)
pw[i]=pw[i-1]*2%mod;
}
inline ll add(ll a,ll b)
{
a+=b;
return a>=mod?a-mod:a;
}
int main()
{
ll n;
cin>>n;
init();
for (int i=1;i<=n;++i)
scanf("%lld",&a[i]);
ll ans=0;
for (ll i=1;i<=n;++i)
ans=add(ans,add(pw[n-i],(n-i+mod)%mod*pw[n-i-1]%mod)*a[i]%mod);
cout<<ans;
return 0;
}

Codeforces 1009 E. Intercity Travelling(计数)的更多相关文章

  1. Codeforces D. Intercity Travelling(区间组合)

    题目描述: D. Intercity Travelling time limit per test 1.5 seconds memory limit per test 256 megabytes in ...

  2. E. Intercity Travelling

    E. Intercity Travelling time limit per test 1.5 seconds memory limit per test 256 megabytes input st ...

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

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

  4. Educational Codeforces Round 47 (Rated for Div. 2) :E. Intercity Travelling

    题目链接:http://codeforces.com/contest/1009/problem/E 解题心得: 一个比较简单的组合数学,还需要找一些规律,自己把方向想得差不多了但是硬是找不到规律,还是 ...

  5. Codeforces 1009E Intercity Travelling | 概率与期望

    题目链接 题目大意: 一个人要从$A$地前往$B$地,两地相距$N$千米,$A$地在第$0$千米处,$B$地在第$N$千米处. 从$A$地开始,每隔$1$千米都有$\dfrac{1}{2}$的概率拥有 ...

  6. Educational Codeforces Round 47 (Rated for Div. 2)E.Intercity Travelling

    题目链接 大意:一段旅途长度N,中间可能存在N-1个休息站,连续走k长度时,疲劳值为a1+a2+...+aka_1+a_2+...+a_ka1​+a2​+...+ak​,休息后a1a_1a1​开始计, ...

  7. CodeForces - 1009E Intercity Travelling

    题面在这里! 可以发现全是求和,直接拆开算贡献就好了 #include<bits/stdc++.h> #define ll long long using namespace std; c ...

  8. CodeForces 176B Word Cut (计数DP)

    Word Cut Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit St ...

  9. codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题

    http://codeforces.com/problemset/problem/1009/B B. Minimum Ternary String time limit per test 1 seco ...

随机推荐

  1. Python取值的灵活性用法

    samp_string = "Whatever you are, be a good one." for i in samp_string: print(i) ,len(samp_ ...

  2. 记录RabbitMQ

    第一步:建立Erlang环境 >>https://www.erlang.org/downloads 下载并安装.一路Next即可. 默认安装目录: C:\Program Files\erl ...

  3. 【js】null 和 undefined的区别?

    1.首先看一个判断题:null和undefined 是否相等     console.log(null==undefined)//true     console.log(null===undefin ...

  4. javabean转成json字符首字母大写

    今天写接口的时候有个需求将接口返回的json字符串首字母大写:{"SN":"","Result":""}格式, 只需要在 ...

  5. FastJson学习:JSON格式字符串、JSON对象及JavaBean之间的相互转换

    当前台需要传送一系列相似数据到后端时,可以考虑将其组装成json数组对象,然后转化为json形式的字符串传输到后台 例如: nodes = $('#PmPbsSelect_tree').tree('g ...

  6. iTop4412开发板+虚拟机+tftp服务

    感觉好坑啊 利用路由器+2根网线+tftp服务 首先是开发板,主机,虚拟机相互之间能ping通(坑), 关闭主机防火墙,防止被强 关闭虚拟机防火墙 虚拟机装上tftpd服务端(通过网上教程嘛) 是不是 ...

  7. JavaSpring【六、AOP的API】

    AOP API Spring1.2历史用法,现在仍然支持 现在xml配置和注解的用法是基于API的,只是比较简便

  8. MySQL开启binlog无法启动ct 10 21:27:31 postfix/pickup[4801]: warning: 6BD991A0039: message has been queue

    1 详细异常 ct 10 21:27:31 postfix/pickup[4801]: warning: 6BD991A0039: message has been queue Oct 10 21:2 ...

  9. (二十四)Ubuntu16.04配置ADB调试环境

    一.安装adb 1.可以通过 apt-get install android-tools-adb 来安装adb sudo add-apt-repository ppa:nilarimogard/web ...

  10. linux入门常用指令2.安装nginx

    下载nginx包 nginx-1.10.3.tar.gz 解压 [root@localhost src]# tar -zxvf nginx-1.10.3.tar.gz [root@localhost ...