UVA1607 Gates 与非门电路 (二分)

题意:给你一个按发生时间的序列,表示与非门电路的输入,一开始全部输入是x,现在要改成尽量少的x,实现相同的功能。

题解:电路功能只有4中0,1,x,非x。那么如果一开始x改变了,输出结果不变,那么说明是常量电路。否则一定可以只用一个x来实现相同的功能,因为从全为0到全为1的过程中一定会有某个时刻,改变了一个位置上的值结果也随之改变。

由于m很大,不能一个一个地试,二分来找。判断的时候,如果输入端编号小于等于输入参数k,那么就为1,否则为0。如果mid跑出来的结果和全为1的一致,那么,mid+1以后的位置一定都不是了,区间变成[L,mid],否则mid以及之前的一定都不是,区间变成[mid+1,R]。

#include<bits/stdc++.h>
using namespace std;

const int maxm = 200005;
int n,m;
int o[maxm],s1[maxm],s2[maxm];

inline int Run(int k)
{
    //cout<<"fuck\n";
    for(int i = 1; i <= m ;i++){
        int x = s1[i];
        int y = s2[i];
        int a = x<0?-x<=k:o[x];
        int b = y<0?-y<=k:o[y];
        o[i] = !(a&b);
    }
    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 = 1; i <= m; i++){
           scanf("%d%d",s1+i,s2+i);
        }
        int v0 = Run(0), vn = Run(n);

        if(v0 == vn) {
            for(int i = 0; i < n; i++) putchar(‘0‘);
            putchar(‘\n‘); continue;
        }

        int L = 0, R = n;
        int mid;
        while(L<R) {
            mid = (L + R)>>1;
            if(Run(mid) == vn) R = mid;
            else L = mid+1;
        }
        for(int i = 1; i < L; i++) putchar(‘1‘);
        putchar(‘x‘);
        for(int i = L+1; i <= n; i++) putchar(‘0‘);
        if(T) putchar(‘\n‘);
    }
    return 0;
}
时间: 2024-10-29 08:07:12

UVA1607 Gates 与非门电路 (二分)的相关文章

高阻态;什么是三态门? 三态逻辑与非门电路以及三态门电路

http://www.elecfans.com/dianzichangshi/200805269451.html 高阻态:既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的. 三态输出门电路(TS(Three-state output Gate)门) 上图为三态门输出门电路的原理图.在图中,如果将虚线方框内的两个反相器和一个二极管剪掉,剩下的部分就是典型的TTL与非门电路. 所谓三态是

TTL电平,CMOS电平,OC门,OD门基础知识

转载: http://blog.csdn.net/qq258711519/article/details/10957253 一.TTL  TTL集成电路的主要型式为晶体管-晶体管逻辑门(transistor-transistor logic gate),TTL大部分都采用5V电源.  1.输出高电平Uoh和输出低电平Uol  Uoh≥2.4V,Uol≤0.4V  2.输入高电平和输入低电平  Uih≥2.0V,Uil≤0.8V    二.CMOS  CMOS电路是电压控制器件,输入电阻极大,对于

TTL电平,CMOS电平,232/485电平,OC门,OD门基础知识

 1.RS232电平 或者说串口电平,有的甚至说计算机电平,所有的这些说法,指得都是计算机9针串口 (RS232)的电平,采用负逻辑, -15v ~ -3v 代表1 +3v ~ +15v 代表0 2.RS485电平和RS422电平 由于两者均采用差分传输(平衡传输)的方式,所以它们的电平方式,一般有两个引脚 A,B 发送端 AB间的电压差 +2 ~ +6v:1 -2 ~ -6v:0 接收端 AB间的电压差 大于 +200mv  1 小于 -200mv  0 定义逻辑1为B>A的状态: 定义逻辑0

TTL和COMS电平匹配以及电平转换的方法

一.TTL TTL集成电路的主要型式为晶体管-晶体管逻辑门(transistor-transistor logic gate),TTL大部分都采用5V电源.1.输出高电平Uoh和输出低电平UolUoh≥2.4V,Uol≤0.4V2.输入高电平和输入低电平Uih≥2.0V,Uil≤0.8V二.CMOSCMOS电路是电压控制器件,输入电阻极大,对于干扰信号十分敏感,因此不用的输入端不应开路,接到地或者电源上.CMOS电路的优点是噪声容限较宽,静态功耗很小.1.输出高电平Uoh和输出低电平UolUoh

IIC、SPI和UART区别

第一个区别当然是名字:     SPI(Serial Peripheral Interface:串行外设接口);     I2C(INTER IC BUS)     UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上:     SPI总线由三条信号线组成:串行时钟(SCLK).串行数据输出(SDO).串行数据输入(SDI).SPI总线可以实现多个SPI设备互相连接.提供SPI串行时钟的SPI设备为SPI主机

漏极开路,推挽,上拉电阻,弱上拉,三态门,准双向口

我们先来说说集电极开路输出的结构.集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”).对于图 1,当左端的输入为“0”时,前面的三极管截止(即集电极c跟发射极e之间相当于断开),所以5v电源通过1k电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合):当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开).       我们将图1简化成图2的样子.图2中的开关受软件控

Verilog(四)时序模型

时序模型:仿真器的时间推进模型,它反映了推进仿真时间和调度事件的方式. 1)门级时序模型:适用于分析所有的连续赋值语句,过程连续赋值语句,门级原语,用户自定义原语. 特点:任意时刻,任意输入变化都将重新计算其输出.假设已经存在一个门级时序模型,同时该模型产生的一个事件已被调度但还未执行,如果事件的结果将导致 一个新事件产生,仿真器会撤销对先前事件的调度,转而调度新事件. 适用于模拟电路中的惯性延时.适用于组合逻辑建模. 惯性延时:例如在一个与非门电路中,门延时5ns,那么任何小于这个延时值的输入

FPGA开发全攻略——概念篇

原文链接: FPGA开发全攻略连载之一:FPGA为什么这么热? FPGA开发全攻略连载之二:为什么工程师要掌握FPGA开发知识? FPGA开发全攻略连载之三:FPGA基本知识与发展趋势(part1) FPGA开发全攻略连载之四:FPGA基本知识与发展趋势(part2) 写在前面 2008年,我参加了几次可编程器件供应商举办的技术研讨会,让我留下深刻印象的是参加这些研讨会的工程师人数之多,简直可以用爆满来形容,很多工程师聚精会神地全天听讲,很少出现吃完午饭就闪人的现象,而且工程师们对研讨会上展出的

[转] 什么叫三态门/高阻态? 及三态门的应用

原文网址:http://www.dz3w.com/info/digital/75751.html 什么叫三态门/高阻态? 及三态门的应用 什么叫态门 三态门,是指逻辑门的输出除有高.低电平两种状态外,还有第三种状态——高阻状态的门电路.高阻态相当于隔断状态(电阻很大,相当于开路). 三态门都有一个EN控制使能端,来控制门电路的通断. 可以具备这三种状态的器件就叫做三态(门,总线,......).        计算机里面用1和0表示是,非两种逻辑,但是,有时候,这是不够的,   比如说,他不够富