Problem - 1452D - Codeforces
在一条坐标线上有n+2个城镇,编号从0到n+1。第i个城镇位于第i点。
你在1,2,......,n个镇上各建一座无线电塔,概率为12(这些事件是独立的)。之后,你想把每个塔的信号功率设置为1到n的某个整数(信号功率不一定相同,但也不一定不同)。位于i镇的信号塔的信号功率为p,可以到达每一个城市c,这样|c-i|<p。
在建造信号塔后,你要以这样的方式选择信号功率。
城镇0和n+1没有收到任何无线电塔的信号。
1,2,...,n镇从每个镇的一个无线电塔获得信号。
例如,如果n=5,你在2、4、5镇建了塔,你可以把2镇的塔的信号功率设为2,4、5镇的塔的信号功率设为1。 这样,0和n+1镇就不会得到任何塔的信号,1、2、3镇得到2镇塔的信号,4镇得到4镇塔的信号,5镇得到5镇塔的信号。
计算以下概率:在建造塔台后,你将有办法设置信号功率以满足所有的限制条件。
输入
输入的第一行(也是唯一的一行)包含一个整数n(1≤n≤2⋅105)。
输出
打印一个整数--有办法设置信号功率以满足所有约束条件的概率,取模为998244353。
从形式上看,这个概率可以表示为一个不可还原的分数xy。你必须打印x⋅y-1mod998244353的值,其中y-1是一个整数,使y⋅y-1mod998244353=1。
例子
输入复制
2
outputCopy
748683265
输入副本
3
输出拷贝
748683265
输入副本
5
输出拷贝
842268673
输入副本
200000
输出拷贝
202370013
注意
第一个例子的真实答案是14。
概率为14,塔楼建在1号和2号镇,所以我们可以把它们的信号功率设为1。
第二个例子的真实答案是14。
概率为18,塔楼建在1、2和3镇,所以我们可以把它们的信号功率设为1。
在概率为18的情况下,只有2号镇有一座塔,我们可以将其信号功率设为2。
第三个例子的真实答案是532。请注意,即使前面的解释中使用了所有塔的信号功率相等,也不一定如此。例如,如果n=5,塔建在2、4和5镇,你可以把2镇的塔的信号功率设为2,4和5镇的塔的信号功率设为1。
题解:
我们看是概率,然后分母是2^n每一个放不放。之后我们看分子。分子式所有可行方案数。
我们首先可以先将前几种确定:
n=1
1只有一种
n=2
1 1 也只有一种
n=3
0 2 0
1 1 1 两种
n=4
1 1 1 1
0 2 0 1
1 0 2 0 三种
n=5
1 1 1 1 1
0 2 0 1 1
1 1 0 2 0
0 0 3 0 0
1 0 2 0 1五种
通过举例我们就能发现他与斐波那契数列有关。
(打表真的是一个很重要的思想,有时候没思路可以打表试一试)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<queue>
using namespace std;
long long n;
int mod = 998244353;
long long a[200050];
long long qpow(long long x,long long y)
{
long long ans = 1;
while(y)
{
if(y&1)
ans = ans*x%mod;
y/=2;
x = x*x%mod;
}
return ans;
}
void solve()
{
cin >> n;
long long ans = qpow(2,n);
ans = qpow(ans,mod-2);
a[1] = 1;
a[2] = 1;
for(int i = 3;i <= n;i++)
{
a[i] = (a[i-1] + a[i-2])%mod;
}
cout<<a[n]*ans%mod;
}
int main()
{
int t = 1;
// cin >> t;
while(t--)
{
solve();
}
}
//10 3 100
//9 3
//6 6
//3