UVa 1607 (二分) Gates
这道题真的有点“神”啊。= ̄ω ̄=
因为输入都是x,所以整个电路的功能一共就四种:0, 1, x,!x
所以就确定了这样一个事实:如果电路的输出是常数,那么所有的输入都可以优化成常数。
否则,只需要将一个输入变为变量即可,其他的全部为常数。
从00...0到11...1,在1的数量增多的过程中一定有一个位置,使得output(k) = output(n), output(k-1) = output(0)。output(k)表示前面有k个1,有n-k个0.
那么将第k为设为变量即可,k前面输出0,k后面输出1即可。
k的位置可以用二分来确定。
#include <cstdio> const int maxn = + ;
int a[maxn], b[maxn], o[maxn];
int n, m; int output(int k)
{
for(int i = ; i <= m; i++)
{
int va = a[i] < ? -a[i] > k : o[a[i]];
int vb = b[i] < ? -b[i] > k : o[b[i]];
o[i] = !(va && vb);
}
return o[m];
} int main()
{
//freopen("in.txt", "r", stdin); int T; scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &m);
for(int i = ; i <= m; i++) scanf("%d%d", &a[i], &b[i]);
int v0 = output();
int vn = output(n); if(v0 == vn)
for(int i = ; i < n; i++) putchar('');
else
{
int L = , R = n;
while(L < R)
{
int M = (L + R) / ;
if(output(M) == vn) R = M;
else L = M + ;
}
for(int i = ; i < L; i++) putchar('');
putchar('x');
for(int i = L + ; i <= n; i++) putchar('');
}
printf("\n");
} return ;
}
代码君
UVa 1607 (二分) Gates的更多相关文章
- Uva - 1607 - Gates
		
题目理解麻烦,估计提交量少(总共只有32个人...)也是因为题目比较麻烦,看起来像物理题,实际理解了还可以.整个电路的功能就4种,先判断x=0和x=1的输出是否相同,吐过相同,而整个电路是常熟,随便输 ...
 - 紫书 例题8-14 UVa 1607 (二分)
		
题意非常难理解-- #include<cstdio> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namesp ...
 - UVa 714 (二分) Copying Books
		
首先通过二分来确定这种最大值最小的问题. 假设每个区间的和的最大值为x,那么只要判断的时候只要贪心即可. 也就是如果和不超过x就一直往区间里放数,否则就开辟一个新的区间,这样来判断是否k个区间容得下这 ...
 - uva 12587 二分枚举
		
思路:维护一个森林,二分枚举最小的最大值. #include<set> #include<map> #include<cmath> #include<queu ...
 - UVa 1475 (二分+半平面交) Jungle Outpost
		
题意: 有n个瞭望塔构成一个凸n边形,敌人会炸毁一些瞭望台,剩下的瞭望台构成新的凸包.在凸多边形内部选择一个点作为总部,使得敌人需要炸毁的瞭望塔最多才能使总部暴露出来.输出敌人需要炸毁的数目. 分析: ...
 - uva 10125  二分
		
https://vjudge.net/problem/UVA-10125 和之前做过的一道a+b+c=X的问题类似,不过这个要求多了a+b+c=d-->a+b=d-c 且abcd互不相等 我们 ...
 - UVa 10341 (二分求根) Solve It
		
很水的一道题,因为你发现这个函数是单调递减的,所以二分法求出函数的根即可. #include <cstdio> #include <cmath> //using namespa ...
 - 训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分)
		
layout: post title: 训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分) author: "luowentaoaa" catalog: tr ...
 - UVa 714 Copying Books(二分)
		
题目链接: 传送门 Copying Books Time Limit: 3000MS Memory Limit: 32768 KB Description Before the inventi ...
 
随机推荐
- 从xml文件中读取注释
			
void Main() { string dirp=@"E:\Cread\UP4201308.bak\UP4.BAK\ExportPath\ConfigFile\"; ...
 - shell脚本替换文件中字符
			
1.将当前目录下包含jack串的文件中,jack字符串替换为tom sed -i "s/jack/tom/g" `grep "jack" -rl ./` 2.将 ...
 - spring_150806_hibernate_non_transaction
			
添加hibernate的相关jar包! 实体类: package com.spring.model; import javax.persistence.Entity; import javax.per ...
 - redis系列之Redis应用场景
			
1 取最新N个数据的操作 比如典型的取你网站的最新文章,通过下面方式,我们可以将最新的5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库获取 1)使用LPUSH latest ...
 - SQLServer错误代码解释
			
SQLServer出现错误的代码大全(好用) Code Error Message 0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. ...
 - 284.	Peeking Iterator
			
题目: Given an Iterator class interface with methods: next() and hasNext(), design and implement a Pee ...
 - JBoss7配置指南
			
JBoss7配置指南 1. jboss各主要版本特性... 3 1.1. jboss4特性... 3 1.2. jboss5特性... 5 1.3. jboss6特性 ...
 - USACO Section 3.1: Agri-Net
			
minimal spanning tree的经典题 /* ID: yingzho1 LANG: C++ TASK: agrinet */ #include <iostream> #incl ...
 - UBoot常用命令手册
			
UBoot常用命令手册 U-Boot还提供了更加详细的命令帮助,可以通过”?”显示支持的命令列表,通过help [CommandName]命令还可以查看每个命令的参数说明. 1.bootm bootm ...
 - flex 4 transition
			
<s:transitions> <s:Transition fromState="default"> <s:Parallel> <mx:R ...