【CodeForces】913 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的更多相关文章
- 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP
[题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...
- 【CodeForces】913 D. Too Easy Problems
[题目]D. Too Easy Problems [题意]给定n个问题和总时限T,每个问题给定时间ti和限制ai,当解决的问题数k<=ai时问题有效,求在时限T内选择一些问题解决的最大有效问题数 ...
- 【CodeForces】913 C. Party Lemonade
[题目]C. Party Lemonade [题意]给定n个物品,第i个物品重量为2^(i-1)价值为ci,每个物品可以无限取,求取总重量>=L的最小代价.1<=30<=n,1< ...
- 【Codeforces】Round #491 (Div. 2) 总结
[Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...
- 【Codeforces】Round #488 (Div. 2) 总结
[Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...
- 【CodeForces】601 D. Acyclic Organic Compounds
[题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...
- 【Codeforces】849D. Rooter's Song
[算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...
- 【CodeForces】983 E. NN country 树上倍增+二维数点
[题目]E. NN country [题意]给定n个点的树和m条链,q次询问一条链(a,b)最少被多少条给定的链覆盖.\(n,m,q \leq 2*10^5\). [算法]树上倍增+二维数点(树状数组 ...
- 【CodeForces】925 C.Big Secret 异或
[题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...
随机推荐
- C++ Primer Plus学习:第二章
C++入门第二章:开始学习C++ 进入C++ 首先,以下是一个C++程序: //myfirst.cpp 显示一行文字 #include<iostream> //预处理器编译指令 int m ...
- WPF浏览器应用程序与JS的互调用(不用WebBrowser)
首先说些题外话,很久没有写博客了,空间里面的大部分文章还是11年写的.那时候刚毕业就来到这家公司,参与到一个Asp.net MVC的项目开发中,这个项目是一个全新的项目,连项目开发框架都没有,亏得领导 ...
- String、StringBuilder与StringBuffer的区别
1.String类是public.final修饰的. 在Java中,被final修饰的类是不允许被继承的,并且String它的成员方法都默认为final方法. 查看源码得知,String类其实是通过c ...
- 如何在java中实现跨线程的通讯
一般而言,如果没有干预的话,线程在启动之后会一直运行到结束,但有时候我们又需要很多线程来共同完成一个任务,这就牵扯到线程间的通讯. 如何让两个线程先后执行?Thread.join方法 private ...
- 框架整合小小总结【SSH】注解式
Spring 注解式注册 bean: 大致分为以下几步: 开启 context 空间支持 开启自动扫描功能,指定扫描包路径 使用注解配置 bean (使用@Component 注解) 给 bean 注 ...
- hdu-题目:1058 Humble Numbes
http://acm.hdu.edu.cn/showproblem.php?pid=1058 Problem Description A number whose only prime factors ...
- python的N个小功能(文件内容的匹配替换)
# -*- coding: utf-8 -*- """ Created on Fri Feb 17 20:25:05 2017 @author: who "&q ...
- wp开发(三)--赚取收益篇
App开发完毕了,是否有赚取收益的想法呢?下面很浅显地介绍两种常用赚取收益的方法. 一. 收费 在发布应用时,可以对应用进行定价,发布到商城之后,用户付费才可以下载,当然也可以提供试用版.收益状况可以 ...
- hive 排序和聚集
1.order by 是对数据进行全排序,属于标准排序语句 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规 ...
- 【刷题】BZOJ 1453 [Wc]Dface双面棋盘
Description Input Output Sample Input Sample Output HINT Solution 不强制在线的动态图问题,那就LCT了 类似二分图那道题目 对于四个方 ...