首页 > 其他分享 >CF1886D Monocarp and the Set

CF1886D Monocarp and the Set

时间:2023-10-13 13:24:32浏览次数:40  
标签:ch CF1886D Monocarp LL pos ret Set ans TT

Questions

Monocarp 有 \(n\) 个整数和一个集合,他需要把这 \(n\) 个数添加到集合中,每次添加一次

除了第一次,每次添加元素都会输出一个字符

  • 如果当前添加的元素比原有的元素都要小,那么输出 \(>\)

  • 如果当前添加的元素比原有的元素都要大,那么输出 \(<\)

  • 否则输出 \(?\)

你给予了输出的字符串 \(s\) 有 \(m\) 组询问

  • \(i\) \(c\) 表示用 \(c\) 替换 \(s_i\) 的值

在每次询问前和最后一个询问后,你都需要计算添加整数的方案数,对 998244353取模

Solution

先考虑不修改的情况,正过来做我们发现很难处理,就考虑反过来做

反过来就是对长度为 \(n\) 的数组一个一个删数字

  • > 代表删除最大的数字
  • < 代表删除最小的数字
  • ?代表随意删除一个数字

为了方便我们理解,我们重新规定 \(S_i\) 表示数组元素个数为 \(i\) 时从数组中删除一个元素,这就需要我们在 \(S\) 前加上几个元素

所以很显然,当 <> 时,方案数是 \(1\) ,当是 ? 时,方案数就是 \(i-2\)

所以对于一个的答案,我们就从后往前处理累积到 ans 上面就好了

对于 \(S_2=?\) 情况,显然方案数就是 \(0\) 因为两个肯定有大有小

那么对于询问的情况,那么就用除法和乘法来实现

如果是 ? 替换 < 的话,就需要把 \(ans/=(i-2)\)

由于考虑到要取模,我们需要乘上 \((i-2)\) 的逆元

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

const LL TT=998244353;
const int maxn=2e5+5;

inline LL read(){
    LL ret=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
    while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
    return ret*f;
}

LL N,M,ans=1;
string s;

LL qpow(LL a,LL b){//快速幂求逆元
    LL ret=1;
    while(b){
        if(b&1)ret=ret*a%TT;
        a=a*a%TT;
        b>>=1;
    }
    return ret;
}
int main(){
    // freopen("D.in","r",stdin);
    // freopen("D.out","w",stdout);
    N=read();M=read();
    cin>>s;
    s="  "+s;
    for(int i=N;i>=3;i--)
        if(s[i]=='?') ans=ans*(i-2)%TT;
    printf("%lld\n",s[2]=='?'?0:ans);
    while(M--){
        LL pos=read()+1;
        char ch=getchar();
        if(pos>=3&&s[pos]=='?')
            ans=ans*qpow(pos-2,TT-2)%TT;
        s[pos]=ch;
        if(pos>=3&&s[pos]=='?')
            ans=ans*(pos-2)%TT;
        printf("%lld\n",s[2]=='?'?0:ans);
    }
    return 0;
}

标签:ch,CF1886D,Monocarp,LL,pos,ret,Set,ans,TT
From: https://www.cnblogs.com/martian148/p/17761862.html

相关文章

  • Patch 12419353 - 11.2.0.2.3 GI Patch Set Update (Includes Database PSU 11.2.0.2.
    Released:July19,2011,LastUpdated:August9,2011Thisdocumentisaccurateatthetimeofrelease.ForanychangesandadditionalinformationregardingGIPSU11.2.0.2.3,seetheserelateddocumentsthatareavailableatMyOracleSupport(http://supp......
  • 关于response.setHeader的重定向及多种界面跳转方式
    通过response.setHeader("refresh","1;URL=ttt.jsp");可以在一秒之后自动跳转到ttt.jsp界面 response.sendRedirect("ttt.jsp");立即跳转 <inputtype="button"onclick="javascript:window.location.href='ttt.jsp';&quo......
  • 2023-10-13 (error) ERR Client sent AUTH, but no password is set ==》redis访问密
    当你尝试在redis终端输入authxxx(auth是固定值,xxx是你的密码),然后终端报错:(error)ERRClientsentAUTH,butnopasswordisset意思:(错误)ERR客户端发送了AUTH,但未设置密码。原因:你没有设置redis访问密码。当然如果你非要设置访问密码,那么你可以在redis根目录找到redis.windo......
  • Python 集合(Sets)2
    访问项您无法通过引用索引或键来访问集合中的项。但是,您可以使用for循环遍历集合项,或者使用in关键字检查集合中是否存在指定的值。示例,遍历集合并打印值:thisset={"apple","banana","cherry"}forxinthisset:print(x)示例,检查集合中是否存在"banana":thisset={"......
  • 题解 CF486D Valid Sets
    题目链接相当牛逼。这种找数量的题型,确定树形\(dp\)没跑了。首先思考常规树形\(dp\),不难想到设\(f_{u,a,b}\)表示以\(u\)为根节点的子树内(包括点\(u\)),最大值是\(a\),最小值是\(b\)的连通子图数量,转移很容易,但是这样时间空间复杂度是\(\rmO(n^3)\),而且无论是状态上......
  • Python 集合(Sets)1
    集合集合用于在单个变量中存储多个项。集合是Python中的4种内置数据类型之一,用于存储数据集合,其他3种是列表(List)、元组(Tuple)和字典(Dictionary),它们都具有不同的特性和用途。集合是一种无序、不可更改(*)、无索引的集合。创建一个集合集合用大括号表示。示例,创建一个集合:......
  • django model 条件过滤 queryset.filter详细用法
    条件选取querySet的时候,filter表示=,exclude表示!=。querySet.distinct()去重复__exact精确等于like'aaa'__iexact精确等于忽略大小写ilike'aaa'__contains包含like'%aaa%'__icontains包含忽略大小写ilike'%aaa%',但是对于sqlite来说,contains的作用效果等同......
  • 【Django | 开发】分离上线环境与开发环境(多settings配置)
    ......
  • C++黑马程序员——P223-226. set容器 构造和赋值,大小和交换,插入和删除,查找和统计
    P223.set容器——构造和赋值P224.set容器——大小和交换P225.set容器——插入和删除P226.set容器——查找和统计P223.set容器构造和赋值特点:所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现。set和multiset的区别set不......
  • ADO.NET读取MySQL数据库的三种方式:DataReader、DataSet、DataView
    https://blog.csdn.net/lilongsy/article/details/127351421ADO.NET读取MySQL数据库有多种方式:DataReader、DataSet、DataView。Command对象的ExecuteScalar方法查询数据库获取某个单个值,但是如果获取多行、多列可以用ExcecuteReader,ExcecuteReader返回一个DataReader的数据流对......