首页 > 其他分享 >AtCoder Regular Contest 058 [ARC058] F - Unhappy Hacking

AtCoder Regular Contest 058 [ARC058] F - Unhappy Hacking

时间:2025-01-17 22:44:09浏览次数:1  
标签:AtCoder ARC058 Contest Unhappy 058 字符串 quad

题意:

有三种操作,在右边添加0/1或删除最右边的数(空字符串无操作)

给出操作数\(N\),字符串\(s\),问有多少种方法经过\(N\)次操作后得到字符串\(S\)

思路

最开始在想三维dp,虽然发现了性质,但是没想到很好的用法

重要性质:答案与字符串内容无关,仅与字符串长度有关

定义\(f_{i,j}\)为操作\(i\)次得到长度为\(j\)的字符串的方案数

则有状态转移方程:

\[\begin{align} f_{i,j} = 2*f_{i-1,j-1}+f_{i-1,j+1} \quad (j > 0) \\ f_{i,j} = f_{i-1,j}+f_{i-1,j+1} \quad (j = 0) \end{align} \]

最终答案为

\[\frac {f_{n,len(s)}}{2^{len(s)}} \]

点击查看代码
void solve(){
	string s;
	cin >> n >> s;
	m = s.size();
	f[0][0] = 1;
	for (int i = 1 ; i <= n ; ++i){
		f[i][0] = (f[i-1][0]+f[i-1][1])%mod;
		for (int j = 1 ; j <= n ; ++j){
			f[i][j] = (f[i-1][j-1]*2ll+f[i-1][j+1])%mod;
		}
	}
	ll tmp = quick_pow(2 , m);
	tmp = quick_pow(tmp , mod-2);
	ll ans = tmp*f[n][m]%mod;
	cout << ans << "\n";
}

标签:AtCoder,ARC058,Contest,Unhappy,058,字符串,quad
From: https://www.cnblogs.com/happyalg/p/18677766

相关文章

  • VP AtCoder Beginner Contest 382
    A-DailyCookie题意:有\(n\)个盒子,有些盒子有蛋糕,被人吃了\(m\)个蛋糕,问有几个盒子没蛋糕。直接计算即可。点击查看代码voidsolve(){intn,m;std::cin>>n>>m;std::strings;std::cin>>s;std::cout<<n-std::count(s.begin(),s.end(),......
  • AtCoder Regular Contest 058 [ARC058] E - Iroha and Haiku
    题意:对于所有长度为\(n\),每个数在1到10之间的序列,问有多少个中包含一字串,满足字串可以分为三段和恰好为\(x,y,z\)的部分数据满足:\[3\len\le40,1\lex\le5,1\ley\le7,1\lez\le5,\]思路正向统计有多少个序列满足会遇到重复统计的问题,难以克服,考虑统计统......
  • VP Daiwa Securities Co. Ltd. Programming Contest 2024(AtCoder Beginner Contest 38
    A-Humidifier1题意:一个漏水的桶,在零时刻有零升水,进行\(n\)次加水,在\(t_i\)时刻加\(v_i\)升水,每一时刻会漏一生水,问第n次加水后有多少升水。直接模拟即可,每次加水先减去漏掉的水,注意至少有0升,然后加上新加的水。点击查看代码voidsolve(){intn;std::cin>>n;......
  • VP Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)
    A-aaaadaa题意:给你一个字符串和两个字符\(c_1\),\(c_2\),把字符串里的所有不等于\(c_1\)的字符都换成\(c_2\)。模拟即可。点击查看代码voidsolve(){intn;chara,b;std::cin>>n>>a>>b;std::strings;std::cin>>s;for(auto&c:......
  • AtCoder Regular Contest 067
    \(AT\_arc067\_a\)https://www.luogu.com.cn/problem/AT_arc067_a题解:筛出\(1\simn\)中质数,计算每个质数出现次数,再累乘即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1010,P=1e9+7;intn;intbuc[N];intprime[N],cnt;bool......
  • AtCoder Regular Contest 066(缺d)
    \(AT\_arc066\_a\)https://www.luogu.com.cn/problem/AT_arc066_a题解:长度为\(n\)的队列,其\(A\)数组固定,直接判断题目给定\(A\)数组是否符合题意即可。若符合题意,答案为\(2^{\frac{n}{2}}\),否则答案为\(0\)。#include<bits/stdc++.h>usingnamespacestd;typedeflonglon......
  • atcoder 388 b-e题
    binclude<bits/stdc++.h>usingnamespacestd;/**@brief主函数,程序入口@returnint返回值为0,表示程序正常结束*/intmain(){//输入数组长度n和天数dintn,d;cin>>n>>d;//定义一个vector,用于存储输入数据vector<pair<int,int>>a(n);//输入数组a的元......
  • Atcoder ABC388F Dangerous Sugoroku 题解 [ 蓝 ] [ 矩阵加速 ] [ 状压矩乘 ] [ 模拟
    DangerousSugoroku:赛时写了矩乘T飞了,受到sunkuangzheng大佬的启发才知道要状压矩乘。暴力矩乘思路直接像过河那样写模拟细节非常多,于是考虑像美食家一样的思路,利用矩阵分段加速。定义\(dp_i\)表示\(i\)能否到达,则有如下转移:\[dp_{i}=\bigvee_{j=i-B}^{i-A}dp_{j}\]......
  • Atcoder ABC387F Count Arrays 题解 [ 绿 ] [ 基环树 ] [ 树形 dp ] [ 前缀和优化 ]
    CountArrays:一眼秒的计数题。思路显然,把小于等于的条件化为大的向小的连单向边,每个数的入度都是\(1\),就会形成一个基环树森林。那么考虑这个环上能填什么数。因为所有数都小于等于他后面的数,所以所有数都只能相等。这就启发我们在基环树上缩点之后再进行计数。那么当缩完点......
  • AtCoder Beginner Contest 388 (abc388) 赛后复盘
    为什么不会E????A-B模拟即可。C每一个大麻薯可以和所有小于等于自己\(\frac12\)的麻薯结合,二分即可。时间复杂度\(O(n\logn)\)。点击查看代码#include<bits/stdc++.h>#definelllonglong#definei128__int128#definemem(a,b)memset((a),(b),sizeof(a))#def......