首页 > 其他分享 >「杂题乱刷」CF1886D

「杂题乱刷」CF1886D

时间:2024-02-07 20:33:10浏览次数:26  
标签:CF1886D -- while ans define 杂题 ans% mod

题目链接

简单计数题。

容易看出 \(<,>\) 这两个符号一定只有 \(1\) 种选择,而 \(?\) 就有 \(i-1\) 中选择,总方案数很好推出,这样时间复杂度为 \(O(nm)\),不能通过此题,因此我们考虑用逆元优化,优化后时间复杂度 \(O(m)\)。

参考代码:

点击查看代码
/*
Tips:
你数组开小了吗?
你MLE了吗?
你觉得是贪心,是不是该想想dp?
一个小时没调出来,是不是该考虑换题?
*/
#include<bits/stdc++.h>
using namespace std;
#define map unordered_map
#define forl(i,a,b) for(register long long i=a;i<=b;i++)
#define forr(i,a,b) for(register long long i=a;i>=b;i--)
#define lc(x) x<<1
#define rc(x) x<<1|1
#define cin(x) scanf("%lld",&x)
#define cout(x) printf("%lld",x)
#define lowbit(x) x&-x
#define pb push_back
#define pf push_front
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
#define ll long long
ll t;
long long pw(long long x,long long y,long long mod)
{
	long long an=1,tmp=x;
	while(y!=0)
	{
		if(y&1)
			an=(an%mod*tmp%mod)%mod;
		tmp=(tmp%mod*tmp%mod)%mod;
		y=y>>1;
	}
	an=an%mod;
	return an%mod;
}
void solve()
{
	ll n,m,x,mod=998244353,ans=1;
	string s;
	char y;
	cin>>n>>m>>s;
	s="  "+s;
	forl(i,3,n)
		if(s[i]=='?')
			ans*=i-2,ans%=mod;
	(s[2]=='?')?cout<<0<<endl:cout<<ans<<endl;
	while(m--)
	{
		cin>>x>>y;
		x++;
		if(x!=2 && s[x]=='?')
			ans*=pw(x-2,mod-2,mod),ans%=mod;
		s[x]=y;
		if(x!=2 && s[x]=='?')
			ans*=x-2,ans%=mod;
		(s[2]=='?')?cout<<0<<endl:cout<<ans<<endl;
	}
}
int main()
{
	IOS;
	t=1;
//	cin>>t;
	while(t--)
		solve();
    /******************/
	/*while(L<q[i].l) */
	/*    del(a[L++]);*/
	/*while(L>q[i].l) */
	/*    add(a[--L]);*/
	/*while(R<q[i].r) */
	/*	  add(a[++R]);*/
	/*while(R>q[i].r) */
	/*    del(a[R--]);*/
    /******************/
	QwQ;
}

标签:CF1886D,--,while,ans,define,杂题,ans%,mod
From: https://www.cnblogs.com/wangmarui/p/18011266

相关文章

  • 杂题选谈
    E.AnotherMinimumSpanningTreehttp://222.180.160.110:1024/contest/4940/problem/5曼哈顿最小距离生成树。题意大概就是,给定\(n\)个已知坐标的点,两两之间可以连边,问最小生成树。「博士,我刚当上秉烛人的时候,花了三个月整,才读完司岁台的所有卷宗,而堆积在您这里的文件,数量......
  • 「杂题乱刷」CF1925C & CF1924A
    题目链接CF1925C&CF1924ADidWeGetEverythingCovered?解题思路容易看出,我们可以开个桶存储当前搜索过的字母,当所有字母都有了之后就将桶清空,然后从当前搜到的位置继续存储,如果桶的清空次数小于\(k\)次则一定有至少一个字符串无法达到要求,这时我们只需要构造桶清空时的......
  • 杂题20240131
    CF1753C思路点拨考虑一共有\(s\)个\(0\),\(n-s\)个\(1\)。最终序列的形态就是\(s\)个\(0\)在最前面,后面全部都是\(1\)。考虑在前\(s\)个位置中有\(k\)个\(1\),那么只需要将这\(k\)个\(1\)移动到后面就可以了。考虑第一次有效操作的概率,有\(\dfrac{n(n-1)......
  • 海亮01/25杂题
    海亮1月25日题单本人很菜,复盘如果出锅还请轻喷(QOJ7894link题意给定一个只由圆括号和方括号(即字符集为\(()[]\))的字符串,你现在可以任意地把若干个左括号变成右括号、把若干个右括号变成左括号,但保持括号的种类(圆或方)不变。求是否唯一存在一个变括号的方案,使得括号序列合法。......
  • 最小表示法&Manacher学习笔记+杂题
    字符串系列前言:孩子从小就自卑。四、最小表示法&Manacher学习笔记+杂题相关题单:戳我1.最小表示法最小表示法是用于解决字符串最小表示问题的方法。(1)字符串的最小表示:字符串\(s\)的最小表示为与\(s\)循环同构的所有字符串中字典序最小的字符串。循环同构指的是当字符......
  • 最小表示法&Manacher学习笔记+杂题
    字符串系列前言:孩子从小就自卑。四、最小表示法&Manacher学习笔记+杂题相关题单:戳我1.最小表示法最小表示法是用于解决字符串最小表示问题的方法。(1)字符串的最小表示:字符串\(s\)的最小表示为与\(s\)循环同构的所有字符串中字典序最小的字符串。循环同构指的是当字符......
  • 「杂题乱刷」AT_abc307_e
    链接(at)链接(luogu)dp板子。不难看出,可以设两个状态:\(dp_{i,0}\)表示第\(i-1\)位颜色与第\(1\)位颜色不同且前\(i\)位每相邻两位的颜色均不同的方案数。\(dp_{i,1}\)表示第\(i-1\)位颜色与第\(1\)位颜色相同且前\(i\)位每相邻两位的颜色均不同的方案数。......
  • 「杂题乱刷」AT_abc308_f
    链接(at)链接(luogu)简单贪心。又是一道出过很多次的板子题。容易发现,我们可以将商品价格先从小到大排序,然后使用指针维护,将所有能取的优惠价格放入单调队列里,然后取最大值,因为后面的商品同样也能取此商品去过的同样优惠,故而取最大值即可,不会对最终答案产生影响。代码:点击查看......
  • 240125 杂题选谈
    PKUSC2022Mahjonghttp://222.180.160.110:1024/contest/4813/problem/1https://www.bilibili.com/video/BV1JB4y1R7AP/这里是PKUSC当时的讲解视频。听说可以证明本题一定有\(\le5\)的解。好神奇。就比如说我们爆搜,\(9^4\times13^4\)这个显然干不动对吧,所以我们考虑......
  • Trie树学习笔记+杂题(进阶1 Trie)
    前言:回来上课吧,不然真的就没人了。现在也是没有脑子一、Trie树学习笔记+杂题(进阶1Trie)相关题单:戳我1.trie树简介字典树,英文名trie。顾名思义,就是一个像字典一样的树,核心原理就是用空间换时间,利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,所以它可以处......