玻璃走廊题解

2.  玻璃走廊

题目ID:22964必做题文件操作100分

时间限制: 2000ms

空间限制: 1024000kB

输入文件名: chain.in

输出文件名: chain.out

题目背景

不知多久后,汤圆发现周遭的事物会根据它的所思所想发生变化。它可以按照自己所想,去改变这个世界。

题目描述

汤圆创建出了一个 n+1n+1 段的走廊,这些段依次编号为 0,1,⋯ ,n0,1,⋯,n。这扇走廊里有 nn 扇门,第 ii 扇门连接走廊的第 ii 段与第 i+1i+1 段。初始有的门是关闭的,有的门是打开的,这个状态由一个长为 nn 的 01 串 ss 给出:si=1si​=1 表示第 ii 扇门关闭,si=0si​=0 表示第 ii 扇门打开。

汤圆最开始在走廊的第 00 段,现在它要走到第 nn 段。汤圆可以任意通过打开的门,并且移动不会耗费任何代价。

汤圆可以不断进行如下操作:

  • 任意时刻,汤圆可以选定一扇关闭的门,然后尝试用意念将其打开。这步操作后,这扇门的状态会从关闭变为打开。
  • 由于世界运行的规律,在执行完这步操作后,会有一扇等概率随机的开着的门被关上。注意这扇门可能是汤圆刚打开的门。

求最优策略下,汤圆到达第 nn 扇门最少期望执行多少次开门操作,对 109+7109+7 取模。这里最优策略定义为时刻最小化开门次数的期望。

输入格式

从文件 chain.in 中读入数据。

第一行一个正整数 nn,表示走廊的长度。

第二行一个长为 nn 的 01 串 ss,表示门初始的开关情况。

输出格式

输出到文件 chain.out 中。

输出一行一个整数,表示汤圆到达第 nn 段走廊所需要的期望开门次数,对 109+7109+7取模。

样例

Input 1
 

2 10

Output 1
 

4

Input 2
 

4 1100

Output 2
 

937500012

Input 3
 

10 1010011010

Output 3
 

881510620

数据范围

对于第 1∼41∼4 组数据,n≤15n≤15。

对于第 55 组数据,保证 ss 中 1 形成一段后缀。

对于第 6∼76∼7 组数据,保证 ss 中最多有一个 1

对于第 8∼108∼10 组数据,保证 ss 中最多有两个 1

对于第 11∼1511∼15 组数据,n≤300n≤300。

对于第 16∼2016∼20 组数据,无特殊限制。

对于所有数据,保证 1≤n≤30001≤n≤3000,保证 ss 中至少有一个 0

附件

down.zip

 2.  玻璃走廊

题目ID:22964必做题文件操作100分

时间限制: 2000ms

空间限制: 1024000kB

输入文件名: chain.in

输出文件名: chain.out

题目背景

不知多久后,汤圆发现周遭的事物会根据它的所思所想发生变化。它可以按照自己所想,去改变这个世界。

题目描述

汤圆创建出了一个 n+1n+1 段的走廊,这些段依次编号为 0,1,⋯ ,n0,1,⋯,n。这扇走廊里有 nn 扇门,第 ii 扇门连接走廊的第 ii 段与第 i+1i+1 段。初始有的门是关闭的,有的门是打开的,这个状态由一个长为 nn 的 01 串 ss 给出:si=1si​=1 表示第 ii 扇门关闭,si=0si​=0 表示第 ii 扇门打开。

汤圆最开始在走廊的第 00 段,现在它要走到第 nn 段。汤圆可以任意通过打开的门,并且移动不会耗费任何代价。

汤圆可以不断进行如下操作:

  • 任意时刻,汤圆可以选定一扇关闭的门,然后尝试用意念将其打开。这步操作后,这扇门的状态会从关闭变为打开。
  • 由于世界运行的规律,在执行完这步操作后,会有一扇等概率随机的开着的门被关上。注意这扇门可能是汤圆刚打开的门。

求最优策略下,汤圆到达第 nn 扇门最少期望执行多少次开门操作,对 109+7109+7 取模。这里最优策略定义为时刻最小化开门次数的期望。

输入格式

从文件 chain.in 中读入数据。

第一行一个正整数 nn,表示走廊的长度。

第二行一个长为 nn 的 01 串 ss,表示门初始的开关情况。

输出格式

输出到文件 chain.out 中。

输出一行一个整数,表示汤圆到达第 nn 段走廊所需要的期望开门次数,对 109+7109+7取模。

样例

Input 1
 

2 10

Output 1
 

4

Input 2
 

4 1100

Output 2
 

937500012

Input 3
 

10 1010011010

Output 3
 

881510620

数据范围

对于第 1∼41∼4 组数据,n≤15n≤15。

对于第 55 组数据,保证 ss 中 1 形成一段后缀。

对于第 6∼76∼7 组数据,保证 ss 中最多有一个 1

对于第 8∼108∼10 组数据,保证 ss 中最多有两个 1

对于第 11∼1511∼15 组数据,n≤300n≤300。

对于第 16∼2016∼20 组数据,无特殊限制。

对于所有数据,保证 1≤n≤30001≤n≤3000,保证 ss 中至少有一个 0

附件

down.zip

 2.  玻璃走廊

题目ID:22964必做题文件操作100分

时间限制: 2000ms

空间限制: 1024000kB

输入文件名: chain.in

输出文件名: chain.out

题目背景

不知多久后,汤圆发现周遭的事物会根据它的所思所想发生变化。它可以按照自己所想,去改变这个世界。

题目描述

汤圆创建出了一个 n+1n+1 段的走廊,这些段依次编号为 0,1,⋯ ,n0,1,⋯,n。这扇走廊里有 nn 扇门,第 ii 扇门连接走廊的第 ii 段与第 i+1i+1 段。初始有的门是关闭的,有的门是打开的,这个状态由一个长为 nn 的 01 串 ss 给出:si=1si​=1 表示第 ii 扇门关闭,si=0si​=0 表示第 ii 扇门打开。

汤圆最开始在走廊的第 00 段,现在它要走到第 nn 段。汤圆可以任意通过打开的门,并且移动不会耗费任何代价。

汤圆可以不断进行如下操作:

  • 任意时刻,汤圆可以选定一扇关闭的门,然后尝试用意念将其打开。这步操作后,这扇门的状态会从关闭变为打开。
  • 由于世界运行的规律,在执行完这步操作后,会有一扇等概率随机的开着的门被关上。注意这扇门可能是汤圆刚打开的门。

求最优策略下,汤圆到达第 nn 扇门最少期望执行多少次开门操作,对 109+7109+7 取模。这里最优策略定义为时刻最小化开门次数的期望。

输入格式

从文件 chain.in 中读入数据。

第一行一个正整数 nn,表示走廊的长度。

第二行一个长为 nn 的 01 串 ss,表示门初始的开关情况。

输出格式

输出到文件 chain.out 中。

输出一行一个整数,表示汤圆到达第 nn 段走廊所需要的期望开门次数,对 109+7109+7取模。

样例

Input 1
 

2 10

Output 1
 

4

Input 2
 

4 1100

Output 2
 

937500012

Input 3
 

10 1010011010

Output 3
 

881510620

数据范围

对于第 1∼41∼4 组数据,n≤15n≤15。

对于第 55 组数据,保证 ss 中 1 形成一段后缀。

对于第 6∼76∼7 组数据,保证 ss 中最多有一个 1

对于第 8∼108∼10 组数据,保证 ss 中最多有两个 1

对于第 11∼1511∼15 组数据,n≤300n≤300。

对于第 16∼2016∼20 组数据,无特殊限制。

对于所有数据,保证 1≤n≤30001≤n≤3000,保证 ss 中至少有一个 0

附件

down.zip

 2.  玻璃走廊

题目ID:22964必做题文件操作100分

时间限制: 2000ms

空间限制: 1024000kB

输入文件名: chain.in

输出文件名: chain.out

题目背景

不知多久后,汤圆发现周遭的事物会根据它的所思所想发生变化。它可以按照自己所想,去改变这个世界。

题目描述

汤圆创建出了一个 n+1n+1 段的走廊,这些段依次编号为 0,1,⋯ ,n0,1,⋯,n。这扇走廊里有 nn 扇门,第 ii 扇门连接走廊的第 ii 段与第 i+1i+1 段。初始有的门是关闭的,有的门是打开的,这个状态由一个长为 nn 的 01 串 ss 给出:si=1si​=1 表示第 ii 扇门关闭,si=0si​=0 表示第 ii 扇门打开。

汤圆最开始在走廊的第 00 段,现在它要走到第 nn 段。汤圆可以任意通过打开的门,并且移动不会耗费任何代价。

汤圆可以不断进行如下操作:

  • 任意时刻,汤圆可以选定一扇关闭的门,然后尝试用意念将其打开。这步操作后,这扇门的状态会从关闭变为打开。
  • 由于世界运行的规律,在执行完这步操作后,会有一扇等概率随机的开着的门被关上。注意这扇门可能是汤圆刚打开的门。

求最优策略下,汤圆到达第 nn 扇门最少期望执行多少次开门操作,对 109+7109+7 取模。这里最优策略定义为时刻最小化开门次数的期望。

输入格式

从文件 chain.in 中读入数据。

第一行一个正整数 nn,表示走廊的长度。

第二行一个长为 nn 的 01 串 ss,表示门初始的开关情况。

输出格式

输出到文件 chain.out 中。

输出一行一个整数,表示汤圆到达第 nn 段走廊所需要的期望开门次数,对 109+7109+7取模。

样例

Input 1
 

2 10

Output 1
 

4

Input 2
 

4 1100

Output 2
 

937500012

Input 3
 

10 1010011010

Output 3
 

881510620

数据范围

对于第 1∼41∼4 组数据,n≤15n≤15。

对于第 55 组数据,保证 ss 中 1 形成一段后缀。

对于第 6∼76∼7 组数据,保证 ss 中最多有一个 1

对于第 8∼108∼10 组数据,保证 ss 中最多有两个 1

对于第 11∼1511∼15 组数据,n≤300n≤300。

对于第 16∼2016∼20 组数据,无特殊限制。

对于所有数据,保证 1≤n≤30001≤n≤3000,保证 ss 中至少有一个 0

附件

down.zip

 2.  玻璃走廊

题目ID:22964必做题文件操作100分

时间限制: 2000ms

空间限制: 1024000kB

输入文件名: chain.in

输出文件名: chain.out

题目背景

不知多久后,汤圆发现周遭的事物会根据它的所思所想发生变化。它可以按照自己所想,去改变这个世界。

题目描述

汤圆创建出了一个 n+1n+1 段的走廊,这些段依次编号为 0,1,⋯ ,n0,1,⋯,n。这扇走廊里有 nn 扇门,第 ii 扇门连接走廊的第 ii 段与第 i+1i+1 段。初始有的门是关闭的,有的门是打开的,这个状态由一个长为 nn 的 01 串 ss 给出:si=1si​=1 表示第 ii 扇门关闭,si=0si​=0 表示第 ii 扇门打开。

汤圆最开始在走廊的第 00 段,现在它要走到第 nn 段。汤圆可以任意通过打开的门,并且移动不会耗费任何代价。

汤圆可以不断进行如下操作:

  • 任意时刻,汤圆可以选定一扇关闭的门,然后尝试用意念将其打开。这步操作后,这扇门的状态会从关闭变为打开。
  • 由于世界运行的规律,在执行完这步操作后,会有一扇等概率随机的开着的门被关上。注意这扇门可能是汤圆刚打开的门。

求最优策略下,汤圆到达第 nn 扇门最少期望执行多少次开门操作,对 109+7109+7 取模。这里最优策略定义为时刻最小化开门次数的期望。

输入格式

从文件 chain.in 中读入数据。

第一行一个正整数 nn,表示走廊的长度。

第二行一个长为 nn 的 01 串 ss,表示门初始的开关情况。

输出格式

输出到文件 chain.out 中。

输出一行一个整数,表示汤圆到达第 nn 段走廊所需要的期望开门次数,对 109+7109+7取模。

样例

Input 1
 

2 10

Output 1
 

4

Input 2
 

4 1100

Output 2
 

937500012

Input 3
 

10 1010011010

Output 3
 

881510620

数据范围

对于第 1∼41∼4 组数据,n≤15n≤15。

对于第 55 组数据,保证 ss 中 1 形成一段后缀。

对于第 6∼76∼7 组数据,保证 ss 中最多有一个 1

对于第 8∼108∼10 组数据,保证 ss 中最多有两个 1

对于第 11∼1511∼15 组数据,n≤300n≤300。

对于第 16∼2016∼20 组数据,无特殊限制。

对于所有数据,保证 1≤n≤30001≤n≤3000,保证 ss 中至少有一个 0

附件

down.zip

 2.  玻璃走廊

题目ID:22964必做题文件操作100分

时间限制: 2000ms

空间限制: 1024000kB

输入文件名: chain.in

输出文件名: chain.out

题目背景

不知多久后,汤圆发现周遭的事物会根据它的所思所想发生变化。它可以按照自己所想,去改变这个世界。

题目描述

汤圆创建出了一个 n+1n+1 段的走廊,这些段依次编号为 0,1,⋯ ,n0,1,⋯,n。这扇走廊里有 nn 扇门,第 ii 扇门连接走廊的第 ii 段与第 i+1i+1 段。初始有的门是关闭的,有的门是打开的,这个状态由一个长为 nn 的 01 串 ss 给出:si=1si​=1 表示第 ii 扇门关闭,si=0si​=0 表示第 ii 扇门打开。

汤圆最开始在走廊的第 00 段,现在它要走到第 nn 段。汤圆可以任意通过打开的门,并且移动不会耗费任何代价。

汤圆可以不断进行如下操作:

  • 任意时刻,汤圆可以选定一扇关闭的门,然后尝试用意念将其打开。这步操作后,这扇门的状态会从关闭变为打开。
  • 由于世界运行的规律,在执行完这步操作后,会有一扇等概率随机的开着的门被关上。注意这扇门可能是汤圆刚打开的门。

求最优策略下,汤圆到达第 nn 扇门最少期望执行多少次开门操作,对 109+7109+7 取模。这里最优策略定义为时刻最小化开门次数的期望。

输入格式

从文件 chain.in 中读入数据。

第一行一个正整数 nn,表示走廊的长度。

第二行一个长为 nn 的 01 串 ss,表示门初始的开关情况。

输出格式

输出到文件 chain.out 中。

输出一行一个整数,表示汤圆到达第 nn 段走廊所需要的期望开门次数,对 109+7109+7取模。

样例

Input 1
 

2 10

Output 1
 

4

Input 2
 

4 1100

Output 2
 

937500012

Input 3
 

10 1010011010

Output 3
 

881510620

数据范围

对于第 1∼41∼4 组数据,n≤15n≤15。

对于第 55 组数据,保证 ss 中 1 形成一段后缀。

对于第 6∼76∼7 组数据,保证 ss 中最多有一个 1

对于第 8∼108∼10 组数据,保证 ss 中最多有两个 1

对于第 11∼1511∼15 组数据,n≤300n≤300。

对于第 16∼2016∼20 组数据,无特殊限制。

对于所有数据,保证 1≤n≤30001≤n≤3000,保证 ss 中至少有一个 0

附件

down.zip

思路

期望DP。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long n,f[3005][3005],wd[3005][3005],d[3005],qs=0,mod=1e9+7,t1=0,t2=0,t3=0,t=0;
char s[3005];
long long pow2(long long a1,long long b1,long long m1){
	long long kk1=1;
	while(b1>=1){
		if(b1%2==1){
			kk1*=a1;
		}
		b1/=2;
		a1*=a1;
		kk1%=m1;
		a1%=m1;
	}
	return kk1;
}
int main(){
	freopen("chain.in","r",stdin);
	freopen("chain.out","w",stdout);
	cin>>n;
	for(int i=0;i<=n-1;i++){
		cin>>s[i];
		if(s[i]=='0'){
			qs++;
		}
	}
	//cout<<(qs+1)*pow2(qs,mod-2,mod)%mod<<endl;
	for(int i=n-1;i>=0;i--){
		d[i]=d[i+1];
		if(s[i]=='0'){
			d[i]++;
		}
    }
    //d[0]=d[1];
	f[0][qs]=0;
	for(int i=n-1;i>=0;i--){
		for(int j=max(0ll,qs-i);j<=d[i]&&(j<=qs-1||i==0);j++){
            t3=pow2(qs,mod-2,mod);
            t1=(f[i+1][j]+(qs+1)*t3)%mod;
            //if(j!=0){
            	t2=(f[i+1][j-1]+(qs+1)*t3)%mod;
			//} 
            t=(d[i]-j)*pow2(d[i],mod-2,mod)%mod;
			if(s[i]=='1'){
				f[i][j]=(f[i][j]+(qs-j)*t3%mod*t1%mod)%mod;
                if(j){
                    f[i][j]=(f[i][j]+j*t3%mod*t2%mod)%mod;
                }
			}
			else{
				f[i][j]=(f[i][j]+(qs-j)*t3%mod*t1%mod*t)%mod;
				if(j){
                    f[i][j]=(f[i][j]+j*t3%mod*t2%mod*t)%mod;
                }
                //if(j!=0){
					f[i][j]=(f[i][j]+(mod+1-t)*f[i+1][j-1])%mod;
				//}
			}
		}
	}
	cout<<f[0][qs]%mod<<endl;
	return 0;
}

posted @ 2025-10-09 11:44  bz02_2023f2  阅读(2)  评论(0)    收藏  举报  来源