【6.28校内test】T3 【音乐会】道路千万条
首先,你可以忽略上面的一大坨题面,只需要看说明的那一小部分就好啦。

然后理解题意:
然后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 【音乐会】道路千万条的更多相关文章
- 2019.6.28 校内测试 T3 【音乐会】道路千万条
大眼一看最下面的题意解释的话,发现这和洛谷P1310表达式的值挺像的,大概都是给定一些运算符号,让最后的表达式为true的概率,为false的概率啥的QwQ~: 然后这个题嘛?就是在所有的运算符中提溜 ...
- WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...
- [转]SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】一周搞定
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感 谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当 ...
- MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...
- 腾讯面试题,js处理1千万条数据排序并且页面不卡顿
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- orcle 如何快速插入百万千万条数据
有时候做实验测试数据用到大量数据时可以用以下方法插入: 方法一:使用xmltable create table bqh8 as select rownum as id from xmltable('1 ...
- mysql自定义函数并在存储过程中调用,生成一千万条数据
mysql 自定义函数,生成 n 个字符长度的随机字符串 -- sql function delimiter $$ create function rand_str(n int) returns VA ...
- 记录一次mysql导入千万条测试数据过慢的问题!
数据库在没有做任何优化的情况下,使用存储过程,插入1千万条测试数据. CREATE PROCEDURE addmaxdata(IN n int) BEGIN DECLARE i INT DEFAULT ...
- SqlSever2005 一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】
对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数 ...
随机推荐
- 遍历文件夹 DirectoryInfo类
该类有三个方法: GetDirectories() 当前目录的子目录 GetFiles() 当前目录的文件列表 GetFileSystemInfos() 当前目录的文件.子目录,返回强类型Fi ...
- jquery disabled选择器 语法
jquery disabled选择器 语法 作用:disabled 选择器选取所有禁用的表单元素.大理石平台价格表 语法:$(":disabled") jquery disable ...
- BZOJ 3836 Codeforces 280D k-Maximum Subsequence Sum (模拟费用流、线段树)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=3836 (Codeforces) http://codeforces.com ...
- [CSP-S模拟测试]:平方数(数学+哈希)
题目传送门(内部题137) 输入格式 第一行,一个正整数$n$. 第二行$n$个正整数$a_1\sim a_n$. 输出格式 输出一个整数,为满足条件的二元组个数. 样例 样例输入: 51 2 3 4 ...
- jQuery实现表单动态添加与删除数据操作示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- oracle条件参数中 IN函数中的值最大只能为1000个
delete from dep where id in(1,2,3.....) 括号里面字段个数最大只能为1000个
- LeetCode75----分类颜色(变相快排)
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- python3笔记一:python基础知识
一:学习内容 注释 输入输出 标识符 变量和常量 二:注释 1. 单行注释 #:一个井号,代表我注释了这一行 2.多行注释 ''' ''':注释多行,三个单引号 3.多行注释 "" ...
- gcc编译错误
使用boost的时候遇到一个链接错误 undefined reference to `boost::system::detail::generic_category_instance 出现这个问题的有 ...
- 自定义view防支付成功页面
package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.Canvas ...