题目大意

给定一个逻辑表达式,求每一个数满足$\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)的更多相关文章

  1. Restrictions.like("字段field","%表达式exp%");

    Restrictions.like("字段field","%表达式exp%");用hql语句就是 from table where field like '%e ...

  2. C++_系列自学课程_第_10_课_表达式_《C++ Primer 第四版》

    程序设计语言中大部分程序都在进行表达式的求值操作, 例如求两个数的和,求一个表达式的逻辑结果,或者通过输入输出表达式语句进行输入和输出. 这里我们对表达式进行讨论. 一.表达式 1.表达式 表达式由一 ...

  3. codevs2574 波兰表达式

    题目描述 Description 对于 加.减.乘.除这种四则运算的表达式,我们使用的是先乘除.后加减的从左到右的顺序进行运算,如果要指定特定的顺序,就要增加括号进行表达,比如 (A+B)*C , A ...

  4. javascript正则表达式中 (?=exp)、(?<=exp)、(?!exp)

     (?=exp) 百度百科给的解释:非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用.例如,“Windows(?=95|98|NT|2000) ...

  5. 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)

    7.12 Spring 3.0 提供的表达式语言(SpEL) Spring表达式语言(简称SpEL)是一种与JSP 2 的EL功能类似的表达式语言,它可以在运行时查询和操作对象图.支持方法调用和基本字 ...

  6. Linux-正则表达式学习(精)

    正则表达式30分钟入门教程 来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial. 由于评论里有过长的URL,所以本页排版比较混 ...

  7. Scala基础篇-04 try表达式

    1.try表达式 定义 try{} catch{} finally{} //例子 try{ Integer.parseInt("dog") }catch { }finally { ...

  8. 正则表达式和文本挖掘(Text Mining)

    在进行文本挖掘时,TSQL中的通配符(Wildchar)显得功能不足,这时,使用“CLR+正则表达式”是非常不错的选择,正则表达式看似非常复杂,但,万变不离其宗,熟练掌握正则表达式的元数据,就能熟练和 ...

  9. shell中各种括号的作用()、(())、[]、[[]]、{}

    一.小括号,圆括号() 1.单小括号 ()    ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...

随机推荐

  1. 二、Android应用的界面编程(一)界面编程与视图(View)组件

    Android应用的绝大部分UI组件都放在android.widget包及其子包.android.view包及其子包中,Android应用的所有UI组件都继承了View类.它代表一个空白的矩形区域.V ...

  2. nginx学习之反向代理篇(六)

    在本节,你将学会: --如何根据不同的协议,将请求转发到后端服务器: --修改发送到后端服务器的请求头: --以及配置是否buffering从后端服务器返回来的响应. 1. 将请求转发给后端服务器 当 ...

  3. Powerdesigner Name与Comment的互相转换

    使用说明: 在[Tools]-[Execute Commands]-[Edit/Run Script] 下.输入下面你要选择的语句即可: 1.Name填充Comment '把pd中那么name想自动添 ...

  4. Dajngo admin使用

    Dajngo admin使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INS ...

  5. JVM类加载器

    系统中的类加载器 1.BootStrap ClassLoader a.启动ClassLoader b.加载rt.jar 2.Extension ClassLoader a.扩展ClassLoader ...

  6. Tensorflow—gpu报错

    一晚上什么事都没做,就一直在查找tensorflow1.4缺少cudnn64_6的错误. 最后发现自己一直用的是cudnn64_7,即使改成cudnn64_6仍不可行.主要受实验室大佬安装的cudnn ...

  7. Linux vim 中文显示乱码解决方法

    因为在windows下默认是gb编码,而我的vim默认是utf-8(gedit默认也是utf-8),所以打开会成乱码.改动了一下配置文件,使vi支持gb编码就好了.$vi ~/.vimrclet &a ...

  8. css 分析

    .important.warning {background:silver;} .important .warning {background:silver;} //上面有什么区别? //1.2个选择 ...

  9. css判断iphoneX、iphoneXs、iphoneXs Max、iphone XR

    //iphoneX.iphoneXs @media only screen and (device-width: 375px) and (device-height: 812px) and (-web ...

  10. Demo Nec

    /* 布局 */.g-va{width:1160px;margin:0 auto;} /* visual area */ /* 模块 */.m-nav{position:relative;height ...