首页 > 其他分享 >AtCoder Regular Contest 132 E Paw

AtCoder Regular Contest 132 E Paw

时间:2023-05-24 14:15:13浏览次数:65  
标签:AtCoder typedef Paw Contest long Regular maxn define

洛谷传送门

AtCoder 传送门

感觉挺 educational 的。

观察最终形态,发现根据洞分段,有且只有一段没被覆盖,并且左端是向左的脚印,右端是向右的脚印。

最终状态就这几种了,直接枚举,概率乘贡献即可。

发现左端和右端不影响到对方是对称的,直接求出一边的概率。

设 \(f_i\) 为 \(i\) 个洞,填满往左走的脚印,不影响到右边的洞的方案数。

那么每次实际上只用规定选到最左的洞,不往右走即可。有转移:

\[f_i = (1 - \frac{1}{2i}) f_{i-1} \]

最后直接计算即可。

时间复杂度 \(O(n)\)。

code
// Problem: E - Paw
// Contest: AtCoder - AtCoder Regular Contest 132
// URL: https://atcoder.jp/contests/arc132/tasks/arc132_e
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 1000100;
const int N = 1000000;
const ll mod = 998244353;

ll n, a[maxn], m, inv[maxn], f[maxn], b[maxn];
char s[maxn];

void init() {
	inv[1] = 1;
	for (int i = 2; i <= N; ++i) {
		inv[i] = (mod - mod / i) * inv[mod % i] % mod;
	}
}

void solve() {
	scanf("%lld%s", &n, s + 1);
	a[++m] = 0;
	for (int i = 1; i <= n; ++i) {
		if (s[i] == '.') {
			a[++m] = i;
		}
		b[i] = b[i - 1] + (s[i] == '<');
	}
	a[++m] = n + 1;
	f[0] = 1;
	for (int i = 1; i <= n; ++i) {
		f[i] = f[i - 1] * (mod + 1 - inv[i * 2]) % mod;
	}
	ll ans = 0;
	for (int i = 1; i < m; ++i) {
		ans = (ans + (b[a[i + 1] - 1] - b[a[i]] + a[i]) * f[i - 1] % mod * f[m - i - 1] % mod) % mod;
	}
	printf("%lld\n", ans);
}

int main() {
	init();
	int T = 1;
	// scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:AtCoder,typedef,Paw,Contest,long,Regular,maxn,define
From: https://www.cnblogs.com/zltzlt-blog/p/17428108.html

相关文章

  • AtCoder Regular Contest 132 F Takahashi The Strongest
    洛谷传送门AtCoder传送门没见过这种在新运算下做卷积的题,感觉挺新奇的。考虑Takahashi成为绝对赢家的必要条件,发现前提是Aoki和Snuke出的要相同。不妨将每种策略映射到一个四进制数(\(P\to1,R\to2,S\to3\)),定义运算\(x\otimesy=\begin{cases}x&x=y\\0......
  • AtCoder Beginner Contest 296
    AtCoderBeginnerContest296D题意给出n和m,问\(1\leqi,j\leqn\),使得\(ij\geqm\),求出这个乘积的最小值思路这两个乘数至少有一个在\([1,\sqrt{m}]\),枚举代码voidsolve(){ cin>>n>>m; intx=sqrt(m); if(n>=m){cout<<m<<endl;return;} if(x*x==m)......
  • AtCoder Regular Contest 139 C One Three Nine
    洛谷传送门AtCoder传送门闲话:做这场的B用时跟C差不多不会直接构造,因此这是一个无脑做法。考虑对于\(\forallx\in[1,n],y\in[1,m],(x+3y,3x+y)\)看成一个点,那么选择的\((x,y)\)要满足,不存在一行或一列有超过\(1\)个点。这启发我们对于合法的点\((a......
  • Atcoder 选做
    [ARC103F]DistanceSums(构造,重心)首先显然\(D_i\)的最小值被重心取到,不妨以重心为根。对于一条边连接的两个点\(x,y\),不妨设这条边\(x\)侧的点数为\(siz_x\),\(y\)侧为\(siz_y\)。那么\(D_y=D_x+siz_x-siz_y=D_x+siz_x-(n-siz_x)=D_x+2\timessiz_x-n\)。那么......
  • Atcoder Grand Contest 060 D - Same Descent Set
    先推式子。设\(f(S)\)表示decent集合恰好为\(S\)的排列个数,\(g(S)\)表示\(S\)是\(p\)的decent集合的一个子集的排列\(p\)个数,\(g'(\{a_1,a_2,\cdots,a_k\})=\dfrac{n!}{a_1!(a_2-a_1)!(a_3-a_2)!\cdots(a_k-a_{k-1})!(n-a_k)!}\),那么有:\[\begin{aligned}ans=&\......
  • Atcoder Beginner Contest ABC302 题解
    代码见此:https://atcoder.jp/contests/abc302/submissions?f.Task=&f.LanguageName=&f.Status=&f.User=frequenter。AAttackhttps://atcoder.jp/contests/abc302/tasks/abc302_a直接计算a/b,有余数的话答案加一。BFindSnukehttps://atcoder.jp/contests/abc302/tasks/abc......
  • AtCoder Regular Contest 132 D Between Two Binary Strings
    洛谷传送门AtCoder传送门提供一个dp思路。下文设串长为\(n\),串中\(1\)个数为\(m\)。考虑如何求\(d(s,t)\)。设\(s\)的\(1\)位置分别为\(a_1,a_2,...,a_m\),\(t\)的\(1\)位置分别为\(b_1,b_2,...,b_m\)。那么\(d(s,t)=\sum\limits_{i=1}^m|a_i-b......
  • AtCoder Beginner Contest 302 Ex Ball Collector
    洛谷传送门AtCoder传送门考虑如果只询问一次怎么做。连边\((a_i,b_i)\),对于每个连通块分别考虑。这是ARC111B,如果一个连通块是树,肯定有一个点不能被选;否则有环,一定能构造一种方案,使得每个点都被选。那么现在对于每个点都要求,考虑dfs时合并当前的\((a_u,b_u)\),并且使用......
  • 【题解】Atcoder ABC302 F,G,Ex
    完全不会G和Ex,这些套路还是要积累一下的。F.MergeSet题目描述:给定\(n\)个集合,每次可以合并两个有交的集合,问最少多少次合并可以让\(1\)和\(m\)位于同一个集合中。题目分析:一开始将题读成了将\([1,m]\)位于同一个集合中,然后就感觉这个题相当不可做。因为集合的元......
  • AtCoder Regular Contest 130 E Increasing Minimum
    这题太神仙了吧!感觉还不是很懂,但是尽力理一下思路。设\(t_x\)为最大的\(j\)使得\(i_j=x\),不存在则\(t_x=0\)。设\(1\simn\)的数按照\(t\)从小到大排序后是\(p_1,p_2,...,p_n\),设\(q_i\)为\(i\)在\(p\)中的排名,即\(q_{p_i}=i\)。发现正着不好考虑,......