这道题真的有点“神”啊。= ̄ω ̄=

因为输入都是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的位置可以用二分来确定。

 1 #include <cstdio>
 2
 3 const int maxn = 200000 + 10;
 4 int a[maxn], b[maxn], o[maxn];
 5 int n, m;
 6
 7 int output(int k)
 8 {
 9     for(int i = 1; i <= m; i++)
10     {
11         int va = a[i] < 0 ? -a[i] > k : o[a[i]];
12         int vb = b[i] < 0 ? -b[i] > k : o[b[i]];
13         o[i] = !(va && vb);
14     }
15     return o[m];
16 }
17
18 int main()
19 {
20     //freopen("in.txt", "r", stdin);
21
22     int T; scanf("%d", &T);
23     while(T--)
24     {
25         scanf("%d%d", &n, &m);
26         for(int i = 1; i <= m; i++) scanf("%d%d", &a[i], &b[i]);
27         int v0 = output(0);
28         int vn = output(n);
29
30         if(v0 == vn)
31             for(int i = 0; i < n; i++) putchar('0');
32         else
33         {
34             int L = 1, R = n;
35             while(L < R)
36             {
37                 int M = (L + R) / 2;
38                 if(output(M) == vn) R = M;
39                 else L = M + 1;
40             }
41             for(int i = 1; i < L; i++) putchar('0');
42             putchar('x');
43             for(int i = L + 1; i <= n; i++) putchar('1');
44         }
45         printf("\n");
46     }
47
48     return 0;
49 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4428688.html

UVa 1607 (二分) Gates相关推荐

  1. UVa 1607 与非门电路(Gates)

    题意: 可以用与非门来设计逻辑电路.每个NAND门有两个输入端,输出为两个输入端与非运算的结果.即输出0当且仅当两个输入都是1.给出一个由m个NAND组成的无环电路,电路的所有n个输入全部连接到一个相 ...

  2. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  3. 8.6 竞赛题目选讲

    8.6 竞赛题目选讲 量力而行 8-10 抄书 (UVA 714) 把一个包含m个正整数的划分成k个(1<=k<=m<=500)非空的连续子序列,使得每个正整数恰好属于一个序列.设第 ...

  4. 图论算法与模型(训练指南题库)

    一.基础题目 1.UVA 11624 Fire!迷宫问题 多源BFS 题意: 帮助joe走出一个大火蔓延的迷宫,其中joe每分钟可往上下左右四个方向之一走,所有着火的格子都会蔓延(空格与着火格有公共边 ...

  5. POJ 3525/UVA 1396 Most Distant Point from the Sea(二分+半平面交)

    Description The main land of Japan called Honshu is an island surrounded by the sea. In such an isla ...

  6. uva 1463 - Largest Empty Circle on a Segment(二分+三分+几何)

    题目链接:uva 1463 - Largest Empty Circle on a Segment 二分半径,对于每一个半径,用三分求出线段到线段的最短距离,依据最短距离能够确定当前R下每条线段在[0 ...

  7. UVA 1616 Caravan Robbers 【二分+贪心+枚举分母】

    题目链接 题意 给n个互不相包含的区间,求出一个长度的最大值,使得可以在每个区间中选出这样一个长度的子区间,这些子区间互不相交.结果用分数表示 分析 先考虑如果给定了区间长度能不能选出这样的区间.因为 ...

  8. 计算几何(二分) - Crossed Ladders - UVA 10566

    计算几何(二分) - Crossed Ladders - UVA 10566 题意: 如上图,给定三个浮点数x,y,c,计算两个房子之间的间距.如上图,给定三个浮点数x,y,c,计算两个房子之间的间距 ...

  9. UVa 11627 - Slalom 二分. oj错误题目 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

最新文章

  1. boost::safe_numerics模块有理数示例程序
  2. Apache与Tomcat整合
  3. appium---【Mac】Appium-Doctor提示WARN:“ opencv4nodejs cannot be found”解决方案
  4. java加密文件夹_使用java.util.zip压缩文件夹,支持加密,增加描述
  5. 洛谷——P1092 虫食算
  6. vue从入门到精通之进阶篇(二)组件通信:兄弟组件通信
  7. linux c之gcc -g file.c -o file提示warning: no newline at end of file
  8. 通过命令修改wampserver的mysql密码
  9. php实现url伪静态化,全过程详解
  10. (53)Xilinx时钟原语-BUG与IBUFG(第11天)
  11. 计算机组成原理 mov(r0),-(sp),第三章作业
  12. 凤凰刷机找不到手机设备的解决方法
  13. 给视频添加马赛克并裁剪画面的简单步骤
  14. [转] 香港流行乐坛三十年
  15. 对多媒体框架的几点看法
  16. 用Python做一个自动发送邮件的工具
  17. 迪文屏DMT12800K070_A2WTC踩坑实录(一)
  18. mysql execute immediate_动态SQL之EXECUTE IMMEDIATE
  19. VUE组件注册与基础用法
  20. 保存windows10微软聚焦的锁屏壁纸

热门文章

  1. nag在逆向中是什么意思_OD 实验(四) - 去除 NAG 窗口的几种方法
  2. java的this_java的this是什么意思
  3. java报错只有一个数字4,Java 报错 illegal Key Size
  4. java 实现雷达图,如何使用y轴为0到100的chart.js创建雷达图?
  5. PowerShell攻防进阶篇:nishang工具用法详解
  6. 威胁报告:mDNS 反射式 DDoS 攻击
  7. Iterator接口和for...of循环
  8. NXT节点搭建(二)环境搭建
  9. HDU 6015 Colorful Tree(2017多校)
  10. CentOS 6.7 如何启用中文输入法