表达式(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顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...
随机推荐
- 二、Android应用的界面编程(一)界面编程与视图(View)组件
Android应用的绝大部分UI组件都放在android.widget包及其子包.android.view包及其子包中,Android应用的所有UI组件都继承了View类.它代表一个空白的矩形区域.V ...
- nginx学习之反向代理篇(六)
在本节,你将学会: --如何根据不同的协议,将请求转发到后端服务器: --修改发送到后端服务器的请求头: --以及配置是否buffering从后端服务器返回来的响应. 1. 将请求转发给后端服务器 当 ...
- Powerdesigner Name与Comment的互相转换
使用说明: 在[Tools]-[Execute Commands]-[Edit/Run Script] 下.输入下面你要选择的语句即可: 1.Name填充Comment '把pd中那么name想自动添 ...
- Dajngo admin使用
Dajngo admin使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INS ...
- JVM类加载器
系统中的类加载器 1.BootStrap ClassLoader a.启动ClassLoader b.加载rt.jar 2.Extension ClassLoader a.扩展ClassLoader ...
- Tensorflow—gpu报错
一晚上什么事都没做,就一直在查找tensorflow1.4缺少cudnn64_6的错误. 最后发现自己一直用的是cudnn64_7,即使改成cudnn64_6仍不可行.主要受实验室大佬安装的cudnn ...
- Linux vim 中文显示乱码解决方法
因为在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码.改动了一下配置文件,使vi支持gb编码就好了.$vi ~/.vimrclet &a ...
- css 分析
.important.warning {background:silver;} .important .warning {background:silver;} //上面有什么区别? //1.2个选择 ...
- css判断iphoneX、iphoneXs、iphoneXs Max、iphone XR
//iphoneX.iphoneXs @media only screen and (device-width: 375px) and (device-height: 812px) and (-web ...
- Demo Nec
/* 布局 */.g-va{width:1160px;margin:0 auto;} /* visual area */ /* 模块 */.m-nav{position:relative;height ...