表达式(exp)


题目大意
给定一个逻辑表达式,求每一个数满足$\in[1,n]$的使的表达式为真的方案数。
题解
题目限制较奇怪且数据范围较小,所以可以考虑直接暴力。
考虑枚举每一个变量一共出现了$k$种数值,再枚举这些数值之间的大小关系,判断是否满足表达式为真的条件,每有一种,答案就$+C_n^k$即可。
为了方便计算应把中缀表达式转化为后缀表达式,具体方法不再赘述。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define mod 1000000007
#define M 1020
#define OR -1
#define AND -2
#define LESS -3
using namespace std;
int read(){
int nm=0,fh=1; int cw=getchar();
for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
int mul(int x,int y){return (LL)x*(LL)y%mod;}
int add(int x,int y){return (x+y)>=mod?(x+y-mod):x+y;}
int n,m,V[M],W[M],K[M],tot,C[M],p[M],top,S[M],ans;
void upd(int x){ans=add(ans,x);}
int calc(int m1,int m2,int kd){
if(kd==OR) return m1||m2;
if(kd==AND) return m1&&m2;
return W[K[m1]]<W[K[m2]];
}
int qpow(int x,int sq){
int res=1;
for(;sq;x=mul(x,x),sq>>=1) if(sq&1) res=mul(res,x);
return res;
}
void getans(int num){
for(int i=1;i<=tot;W[i]=i,i++);
do{
top=0;
for(int i=1;i<=n;i++){
if(p[i]>0) S[++top]=p[i];
else --top,S[top]=calc(S[top],S[top+1],p[i]);
} if(S[top]) upd(num); --top;
}while(next_permutation(W+1,W+tot+1));
}
void fd(int x){
if(x==8){getans(C[tot]);return;}
for(int i=1;i<=tot;i++){K[x]=i;fd(x+1);}
K[x]=++tot,fd(x+1),tot--;
}
int main(){
for(int ch=getchar();ch!='\n';ch=getchar()){
if(ch==' ') continue;
if(islower(ch)) p[++n]=ch-'a'+1; if(ch=='(') S[++top]=9;
if(ch==')'){while(S[top--]!=9) p[++n]=S[top+1];}
if(ch=='<'){while(S[top]<=LESS) p[++n]=S[top--];S[++top]=LESS;}
if(ch=='&'){while(S[top]<=AND) p[++n]=S[top--];S[++top]=AND;}
if(ch=='|'){while(S[top]<=OR) p[++n]=S[top--];S[++top]=OR;}
} while(top) p[++n]=S[top--]; m=read(),C[0]=1;
for(int i=1;i<=n;i++){
if(p[i]>0) putchar('a'-1+p[i]);
else if(p[i]==LESS) putchar('<');
else if(p[i]==OR) putchar('|');
else if(p[i]==AND) putchar('&');
else puts("SJK_AK_IOI");
putchar(i<n?' ':'\n');
}
for(int i=1;i<=7;i++) C[i]=mul(C[i-1],mul(qpow(i,mod-2),m-i+1));
fd(1),printf("%d\n",ans);return 0;
}
表达式(exp)的更多相关文章
- Restrictions.like("字段field","%表达式exp%");
Restrictions.like("字段field","%表达式exp%");用hql语句就是 from table where field like '%e ...
- C++_系列自学课程_第_10_课_表达式_《C++ Primer 第四版》
程序设计语言中大部分程序都在进行表达式的求值操作, 例如求两个数的和,求一个表达式的逻辑结果,或者通过输入输出表达式语句进行输入和输出. 这里我们对表达式进行讨论. 一.表达式 1.表达式 表达式由一 ...
- codevs2574 波兰表达式
题目描述 Description 对于 加.减.乘.除这种四则运算的表达式,我们使用的是先乘除.后加减的从左到右的顺序进行运算,如果要指定特定的顺序,就要增加括号进行表达,比如 (A+B)*C , A ...
- javascript正则表达式中 (?=exp)、(?<=exp)、(?!exp)
(?=exp) 百度百科给的解释:非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用.例如,“Windows(?=95|98|NT|2000) ...
- 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)
7.12 Spring 3.0 提供的表达式语言(SpEL) Spring表达式语言(简称SpEL)是一种与JSP 2 的EL功能类似的表达式语言,它可以在运行时查询和操作对象图.支持方法调用和基本字 ...
- Linux-正则表达式学习(精)
正则表达式30分钟入门教程 来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial. 由于评论里有过长的URL,所以本页排版比较混 ...
- Scala基础篇-04 try表达式
1.try表达式 定义 try{} catch{} finally{} //例子 try{ Integer.parseInt("dog") }catch { }finally { ...
- 正则表达式和文本挖掘(Text Mining)
在进行文本挖掘时,TSQL中的通配符(Wildchar)显得功能不足,这时,使用“CLR+正则表达式”是非常不错的选择,正则表达式看似非常复杂,但,万变不离其宗,熟练掌握正则表达式的元数据,就能熟练和 ...
- shell中各种括号的作用()、(())、[]、[[]]、{}
一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...
随机推荐
- PHP-Manual的学习----【安装与配置】
2017年6月27日17:59:16 安装与配置 安装前需要考虑的事项 Unix系统下的安装 Mac OS x系统下的安装 windows 系统下的安装 云计算平台上的安 ...
- linux 下配置jdk
去java官方地址下载相应的源码包我下载的是1.8.0放在usr/local目录下 export JAVA_HOME=/usr/local/jdk1.8.0export PATH=$JAVA_HOME ...
- 【BZOJ3791】作业 DP
[BZOJ3791]作业 Description 众所周知,白神是具有神奇的能力的.比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己 ...
- 前端开发中js变量定义及命名的规范建议
关于变量定义及命名 现在谈谈关于变量及方法等的命名,没有硬性规定,但为了规范,遵循一些约定还是很有必要的. 变量定义:好的做法是把将要使用的变量名用一个var关键字一并定义在代码开头,变量名间用逗号隔 ...
- java服务安装(一):使用java service wrapper及maven打zip包
目录(?)[+] 1概述 1_1为什么要用服务形式运行 1_2如何让java程序以服务形式运行 1_3打包需求 2程序示例 3maven打zip包 3_1maven-assembly-plugin介绍 ...
- Django 视图之CBV
CBV 所谓的CBV(class base view) 在视图里面,用类的方式来写逻辑 那么对于FBV,CBV有什么优势? CBV(class base views) 就是在视图里使用类处理请求. P ...
- 存储过程 & 触发器
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用.当对某一表进行诸如UPDATE. INSERT. DELETE 这些操作时, 就会自动执行触发器所定义的SQL 语句 ...
- 使用微软官方U盘制作软件来安装纯净版windows
第一步:下载一个制作U启的工具;windows-usb-dvd-download-tool 微软官网:https://www.microsoft.com/en-us/download/windows- ...
- Java并发之ArrayBlockingQueue
ArrayBlockingQueue是一个由数组支持的有界阻塞队列.此队列按 FIFO(先进先出)原则对元素进行排序.队列的头部是在队列中存在时间最长的元素.队列的尾部是在队列中存在时间最短的元素.新 ...
- Python:笔记(2)——函数与模块
Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...