【题目】E. Logical Expression

【题意】令x=11110000(2),y=11001100(2),z=10101010(2),n次询问,每次要求用[与][或][非][括号]构成含至多各1个xyz的表达式使得结果等于给定的数字(0~255),要求表达式最短(一样短时字典序最小)。n<=10000

【算法】数学+最短路?

【题解】实际上给的数字只有256种情况,所以思路是先预处理再直接回答询问。

对每个表达式我们只关心其结果和最后进行的运算符优先级,所以至多有3*256种状态,令n=3*256。

关于优先级,定义三层优先级,最高F为!和(),次高T为&,最低E为|,表达式的优先级为其最后计算的符号的优先级,低优先级遇到高优先级需要打括号

令F[i]表示最高优先级结果为i的最短表达式,T[i]和E[i]同理,这三种优先级转移如下:

一、F

1.F[i]=min{ F[i] , "(" + E[i] + ")" }

2.F[i]=min{ F[i] , "!" + F[i^255] }

二、T

1.T[i]=min{ T[i] , F[i] }

2.T[i&j]=min{ T[i&j] , T[i]&T[j] }

三、E

1.E[i]=min{ E[i] , T[i] }

2.E[i&j]=min{ E[i&j] , E[i]&E[j] }

只需要这六种转移,三层优先级就可以实现循环转移,可以运用dijkstra,n个结点,转移连边,复杂度O(n^3)。或直接迭代实现至无法更新结束,复杂度O(n^2)。(复杂度分析不太清楚)

最终答案就是ans=E[x],x为输入。

#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std; string f[],t[],e[];
char s[];
int n;
bool cmp(string& a,string& b){return a.size()!=b.size()?a.size()<b.size():a<b;}
bool modify(string& a,string b){return (a==""||cmp(b,a))?a=b,:;}
int main(){
f[]="x";f[]="y";f[]="z";
while(){
bool ok=;
for(int i=;i<;i++)if(e[i]!="")ok|=modify(f[i],"("+e[i]+")");
for(int i=;i<;i++)if(f[i]!="")ok|=modify(f[i^],"!"+f[i]);
for(int i=;i<;i++)if(f[i]!="")ok|=modify(t[i],f[i]);
for(int i=;i<;i++)if(t[i]!="")for(int j=;j<;j++)if(t[j]!="")ok|=modify(t[i&j],t[i]+"&"+t[j]);
for(int i=;i<;i++)if(t[i]!="")ok|=modify(e[i],t[i]);
for(int i=;i<;i++)if(e[i]!="")for(int j=;j<;j++)if(e[j]!="")ok|=modify(e[i|j],e[i]+"|"+e[j]);
if(!ok)break;
}
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",s);int c=;
for(int j=;j<;j++)c|=((s[j]-'')<<j);
cout<<e[c]<<endl;
}
return ;
}

【CodeForces】913 E. Logical Expression的更多相关文章

  1. 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP

    [题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...

  2. 【CodeForces】913 D. Too Easy Problems

    [题目]D. Too Easy Problems [题意]给定n个问题和总时限T,每个问题给定时间ti和限制ai,当解决的问题数k<=ai时问题有效,求在时限T内选择一些问题解决的最大有效问题数 ...

  3. 【CodeForces】913 C. Party Lemonade

    [题目]C. Party Lemonade [题意]给定n个物品,第i个物品重量为2^(i-1)价值为ci,每个物品可以无限取,求取总重量>=L的最小代价.1<=30<=n,1< ...

  4. 【Codeforces】Round #491 (Div. 2) 总结

    [Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...

  5. 【Codeforces】Round #488 (Div. 2) 总结

    [Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...

  6. 【CodeForces】601 D. Acyclic Organic Compounds

    [题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...

  7. 【Codeforces】849D. Rooter's Song

    [算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...

  8. 【CodeForces】983 E. NN country 树上倍增+二维数点

    [题目]E. NN country [题意]给定n个点的树和m条链,q次询问一条链(a,b)最少被多少条给定的链覆盖.\(n,m,q \leq 2*10^5\). [算法]树上倍增+二维数点(树状数组 ...

  9. 【CodeForces】925 C.Big Secret 异或

    [题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...

随机推荐

  1. 第八章 Mysql运算符

    算术运算符 符号 表达式形式 作用 + x1+x2 加法 - x1-x2 减法 * x1*x2 乘法 / x1/x2 除法 div x1 div x2 同上 % x1%x2 取余 mod mod(x1 ...

  2. 高性能的HTTP代理 LittleProxy

    引用: https://github.com/adamfisk/LittleProxy 拦截和操纵HTTPS流量,LittleProxy使用中间人(MITM)管理器. LittleProxy的默认实现 ...

  3. (转)设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)

    Sysctl是一个允许您改变正在运行中的Linux系统的接口.它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能.用sysctl可以读取设置超过五百 ...

  4. Netty系列学习

    Netty系列之Netty高性能之道 Netty系列之Netty线程模型 Netty系列之Netty 服务端创建 Netty系列之Netty编解码框架分析 Netty系列之Netty百万级推送服务设计 ...

  5. 【.Net】C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径

    1.c#根据绝对路径获取 带后缀文件名.后缀名.文件名.   1 string str =" F:\test\Default.aspx"; 2 string filename = ...

  6. 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询

    题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...

  7. P3469 [POI2008]BLO-Blockade

    题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个城镇之间至多只有一条直接连接的道路.人们可以从任意一 ...

  8. P2891 [USACO07OPEN]吃饭Dining(最大流+拆点)

    题目描述 Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she w ...

  9. Fibsieve`s Fantabulous Birthday LightOJ - 1008(找规律。。)

    Description 某只同学在生日宴上得到了一个N×N玻璃棋盘,每个单元格都有灯.每一秒钟棋盘会有一个单元格被点亮然后熄灭.棋盘中的单元格将以图中所示的顺序点亮.每个单元格上标记的是它在第几秒被点 ...

  10. XML格式化加载的时候提示Content is not allowed in prolog. Nested exception: Content is not allowed in prolog

    原因:原本是.xml文件格式的内容,被你用右键,文本编辑,保存,导致格式不认了. 解决方法:下载个notepad+ 工具,用这工具打开,修改,编辑,保存,即可被继续认作xml格式.