【音乐会】道路千万条【题目链接】

首先,你可以忽略上面的一大坨题面,只需要看说明的那一小部分就好啦。

然后理解题意:

就是说我们要给这n-1个运算符指定一个顺序,统计所有值为true的方案数pt,统计所有值为false的方案数pf,然后算pt/(pt+pf) mod 998244353。

然后water_lift就想到了表达式的值【题解】,考虑最后算哪个运算符,一共有n-1种选择。

然后三种情况:

1.最后计算的运算符是‘&’。

那么使表达式为true的方案数就是运算符左边为true的方案数*运算符右边为true的方案数(乘法原理)。

使表达式为false的方案数是左边为true*右边为false+左边false*右边true+左边false*右边false。

2.最后计算的运算符是‘|’。

那么使表达式为true的方案数为:左边true*右边false+左边false*右边true+左边true*右边true;

使表达式为false的方案数为:左边false*右边false;

3.最后计算的运算符是'^'。

那么使表达式为true的方案数为:左边false*右边true+左边true*右边false;

使表达式为false的方案数为:左边false*右边false+左边true*右边true;

所以定义两个数组,t[l][r]表示区间[l,r]为true的方案数,f[l][r]表示区间[l,r]为false的方案数。

那么最终答案就是t[1][n]/(t[1][n]+f[1][n])mod 998244353;

然后显然是可以搜索的,但是我写锅了(并且我不想看)

因此我们还是看DP的解法吧;

就是类比表达式的值,然后求就好辣;(主要是不知道该写啥qwq)

#include<bits/stdc++.h>

using namespace std;

inline int read(){
int ans=;
char last=' ',ch=getchar();
while(ch>''||ch<'') last=ch,ch=getchar();
while(ch<=''&&ch>='') ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} inline char gc(){
char c;
do{
c=getchar();
}while(c==' '||c=='\n'||c=='\r'||c=='\0'||c=='\t');
return c;
} int n;
char s[],ops[];
long long t[][],f[][];
const int mod=;
pair<long long,long long>extgcd(long long a,long long b){
if(b==){
return make_pair<long long ,long long>(,);
}
pair<long long,long long>rtn=extgcd(b,a%b);
rtn.first^=rtn.second^=rtn.first^=rtn.second;//交换两个变量
rtn.second-=a/b*rtn.first;
return rtn;
} int main(){
n=read();
for(int i=;i<=n-;i++){
s[i]=gc();
ops[i]=gc();
}
s[n]=gc();
for(int i=;i<=n;i++){
if(s[i]=='t')
t[i][i]=,f[i][i]=;
else
t[i][i]=,f[i][i]=;
}
for(int len=;len<=n;len++){
for(int i=;i+len-<=n;i++){
int j=i+len-;
for(int k=i;k<j;k++){
if(ops[k]=='&'){
t[i][j]=(t[i][j]+(t[i][k]*t[k+][j])%mod)%mod;
f[i][j]=(f[i][j]+(t[i][k]*f[k+][j])%mod+(f[i][k]*t[k+][j])%mod+(f[i][k]*f[k+][j])%mod)%mod;
}
if(ops[k]=='|'){
f[i][j]=(f[i][j]+(f[i][k]*f[k+][j])%mod)%mod;
t[i][j]=(t[i][j]+(t[i][k]*f[k+][j])%mod+(f[i][k]*t[k+][j])%mod+(t[i][k]*t[k+][j])%mod)%mod;
}
if(ops[k]=='^'){
t[i][j]=(t[i][j]+(t[i][k]*f[k+][j])%mod+(f[i][k]*t[k+][j])%mod)%mod;
f[i][j]=(f[i][j]+(f[i][k]*f[k+][j])%mod+(t[i][k]*t[k+][j])%mod)%mod;
}
}
}
}
cout<<(t[][n]*((extgcd(t[][n] +f[][n]%mod,mod).first%mod+mod)%mod))%mod<<endl;
return ;
}

end-

【6.28校内test】T3 【音乐会】道路千万条的更多相关文章

  1. 2019.6.28 校内测试 T3 【音乐会】道路千万条

    大眼一看最下面的题意解释的话,发现这和洛谷P1310表达式的值挺像的,大概都是给定一些运算符号,让最后的表达式为true的概率,为false的概率啥的QwQ~: 然后这个题嘛?就是在所有的运算符中提溜 ...

  2. WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...

  3. [转]SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】一周搞定

    对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感 谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当 ...

  4. MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]

    对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...

  5. 腾讯面试题,js处理1千万条数据排序并且页面不卡顿

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. orcle 如何快速插入百万千万条数据

    有时候做实验测试数据用到大量数据时可以用以下方法插入: 方法一:使用xmltable create table bqh8 as select rownum as id from xmltable('1 ...

  7. mysql自定义函数并在存储过程中调用,生成一千万条数据

    mysql 自定义函数,生成 n 个字符长度的随机字符串 -- sql function delimiter $$ create function rand_str(n int) returns VA ...

  8. 记录一次mysql导入千万条测试数据过慢的问题!

    数据库在没有做任何优化的情况下,使用存储过程,插入1千万条测试数据. CREATE PROCEDURE addmaxdata(IN n int) BEGIN DECLARE i INT DEFAULT ...

  9. SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】

    对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...

随机推荐

  1. CSS3 3D转换——rotateX(),rotateY(),rotateZ()

    CSS3 允许使用 3D 转换来对元素进行格式化. ㈠浏览器支持 Internet Explorer 10 和 Firefox 支持 3D 转换. Chrome 和 Safari 需要前缀 -webk ...

  2. laravel发送邮件模板中点击的链接url动态生成

    邮件模板里有url链接,生成链接有三种方式(目前总结出这三种方式)这个链接可以是: http://www.xxx.com/active?id=xxx&token=xxx   这种形式是把url ...

  3. Mybatis 结果映射下划线转驼峰

    mybatis 结果映射下划线转驼峰 Spring Boot 配置: #下划线转驼峰 mybatis.configuration.map-underscore-to-camel-case=true m ...

  4. DIY Arduino 方向盘

    之前的项目中使用Arduino做UE4的输入设备时候需要用到UE4Duino这个插件,以字符串的形式从Arduino中组装信息并发送到串口,使用UE4Duino进行解析,过程比较麻烦. 最近发现的一个 ...

  5. Python中的不可变对象类型与可变对象类型

    https://blog.csdn.net/answer3lin/article/details/86430074 其实各个标准资料中没有说明Python有值类型和引用类型的分类,这个分类一般是C++ ...

  6. hive单用户多点模式配置

    简介 单用户多点模式也称远程服务模式,用户非java客户端访问元数据库,在服务端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库. mysq ...

  7. python学习之路(19)

    匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x) ...

  8. CentOS 6.5 安装OSA监控精灵监控主机

    OSA监控是一个开源的图形化免费好用的监控,安装之前首先要配置好PHP环境, yum install httpd mysql mysql-server php-mysql php* -y 编辑http ...

  9. zabbix服务端安装

    1.安装zabbix服务(1)先rpm安装lamp环境 yum install -y httpd mysql mysql-libs php php-mysql mysql-server php-bcm ...

  10. database使用

    参照文档 https://www.cnblogs.com/laoqing/p/8542487.html