【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万条时,很难分辨出开发人员的水平有多高,当数 ...
随机推荐
- Win 7无法安装Microsoft .NET Framework 4.6.2
造冰箱的大熊猫@cnblogs 2018/9/6 在Windows 7 64位计算机上安装某个软件时,安装程序提示需先安装Microsoft .NET Framework 4.6.2.本来以为小事一桩 ...
- spring-boot 中实现标准 redis 分布式锁
一,前言 redis 现在已经成为系统缓存的必备组件,针对缓存读取更新操作,通常我们希望当缓存过期之后能够只有一个请求去更新缓存,其它请求依然使用旧的数据.这就需要用到锁,因为应用服务多数以集群方式部 ...
- Zookeeper入门(七)之Java连接Zookeeper
Java操作Zookeeper很简单,但是前提要把包导对. 关于Zookeeper的Linux环境搭建可以参考我的这篇博客:Linux环境下Zookeeper安装 下面进入正题: 一.导入依赖 < ...
- kotlin 简单处理 回调参数 加?
Kotlin Parameter specified as non-null is null 2017年10月18日 17:21:49 amiko_ 阅读数:9017 版权声明:本文为博主原创文 ...
- C++入门经典-例3.21-goto语句实现循环
1:代码如下: // 3.21.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...
- 第六周学习总结&java实验报告四
第六周学习总结&java实验报告四 学习总结: 上一周因为接近国庆假期,所以老师没有讲太多的新知识点,只要是带我们一起做了一个动物模拟变声器的实验,进一步了解和学习到继承的 有关知识点和应用: ...
- DS博客作业8——课程总结
1.当初你是如何做出选择计算机专业的决定的? 本来我在集美大学第一志愿专业是理学院的数据科学与大数据,奈何隔壁县城小伙伴比我高了2分,我就来到了网络,但经过我和她的交流,我意识到我们的课程差不多,同样 ...
- 浅谈Uep分页查询
<hy:ajaxgrid id="unitGrid" showpagerbar="true" name="unitWrap" show ...
- 自定义view实现画个闪烁的心
package com.loaderman.lovecircledemo; import android.support.v7.app.AppCompatActivity; import androi ...
- Radio 单选框
Radio 单选框 在一组备选项中进行单选 ¶基础用法 由于选项默认可见,不宜过多,若选项过多,建议使用 Select 选择器. 要使用 Radio 组件,只需要设置v-model绑定变量,选中意味着 ...