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的位置可以用二分来确定。
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相关推荐
- UVa 1607 与非门电路(Gates)
题意: 可以用与非门来设计逻辑电路.每个NAND门有两个输入端,输出为两个输入端与非运算的结果.即输出0当且仅当两个输入都是1.给出一个由m个NAND组成的无环电路,电路的所有n个输入全部连接到一个相 ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- 8.6 竞赛题目选讲
8.6 竞赛题目选讲 量力而行 8-10 抄书 (UVA 714) 把一个包含m个正整数的划分成k个(1<=k<=m<=500)非空的连续子序列,使得每个正整数恰好属于一个序列.设第 ...
- 图论算法与模型(训练指南题库)
一.基础题目 1.UVA 11624 Fire!迷宫问题 多源BFS 题意: 帮助joe走出一个大火蔓延的迷宫,其中joe每分钟可往上下左右四个方向之一走,所有着火的格子都会蔓延(空格与着火格有公共边 ...
- 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 ...
- uva 1463 - Largest Empty Circle on a Segment(二分+三分+几何)
题目链接:uva 1463 - Largest Empty Circle on a Segment 二分半径,对于每一个半径,用三分求出线段到线段的最短距离,依据最短距离能够确定当前R下每条线段在[0 ...
- UVA 1616 Caravan Robbers 【二分+贪心+枚举分母】
题目链接 题意 给n个互不相包含的区间,求出一个长度的最大值,使得可以在每个区间中选出这样一个长度的子区间,这些子区间互不相交.结果用分数表示 分析 先考虑如果给定了区间长度能不能选出这样的区间.因为 ...
- 计算几何(二分) - Crossed Ladders - UVA 10566
计算几何(二分) - Crossed Ladders - UVA 10566 题意: 如上图,给定三个浮点数x,y,c,计算两个房子之间的间距.如上图,给定三个浮点数x,y,c,计算两个房子之间的间距 ...
- UVa 11627 - Slalom 二分. oj错误题目 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
最新文章
- boost::safe_numerics模块有理数示例程序
- Apache与Tomcat整合
- appium---【Mac】Appium-Doctor提示WARN:“ opencv4nodejs cannot be found”解决方案
- java加密文件夹_使用java.util.zip压缩文件夹,支持加密,增加描述
- 洛谷——P1092 虫食算
- vue从入门到精通之进阶篇(二)组件通信:兄弟组件通信
- linux c之gcc -g file.c -o file提示warning: no newline at end of file
- 通过命令修改wampserver的mysql密码
- php实现url伪静态化,全过程详解
- (53)Xilinx时钟原语-BUG与IBUFG(第11天)
- 计算机组成原理 mov(r0),-(sp),第三章作业
- 凤凰刷机找不到手机设备的解决方法
- 给视频添加马赛克并裁剪画面的简单步骤
- [转] 香港流行乐坛三十年
- 对多媒体框架的几点看法
- 用Python做一个自动发送邮件的工具
- 迪文屏DMT12800K070_A2WTC踩坑实录(一)
- mysql execute immediate_动态SQL之EXECUTE IMMEDIATE
- VUE组件注册与基础用法
- 保存windows10微软聚焦的锁屏壁纸
热门文章
- nag在逆向中是什么意思_OD 实验(四) - 去除 NAG 窗口的几种方法
- java的this_java的this是什么意思
- java报错只有一个数字4,Java 报错 illegal Key Size
- java 实现雷达图,如何使用y轴为0到100的chart.js创建雷达图?
- PowerShell攻防进阶篇:nishang工具用法详解
- 威胁报告:mDNS 反射式 DDoS 攻击
- Iterator接口和for...of循环
- NXT节点搭建(二)环境搭建
- HDU 6015 Colorful Tree(2017多校)
- CentOS 6.7 如何启用中文输入法