UVALive - 6275 Joint Venture (二分)】的更多相关文章

题意: 给定一个整数w, 然后给定n个数, 问有没有两个数之和恰好为w 分析: 现将n个数数组a[]排序, 然后用两个变量i,j指向开头和末尾, 如果a[i] + a[j] > w, i++, 如果a[i] + a[j] < w, j--. 直到相等或者i == j(找不到结果) #include<bits/stdc++.h> using namespace std; +]; int main(){ int w, n; while(~scanf("%d", &a…
layout: post title: 训练指南 UVALive - 3211 (2-SAT + 二分) author: "luowentaoaa" catalog: true mathjax: true tags: - 2-SAT - 图论 - 训练指南 Now or later UVALive - 3211 题意 n架飞机,每架可选择两个着落时间.安排一个着陆时间表,使得着陆间隔的最小值最大 题解 二分查找最大值P,每次都用2-SAT判断是否可行. #include<bits…
UVALive 3971 题意:有b块钱.想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一般用二分法. 在(0.maxq)内进行二分,判定q作为最差品质因子是否可行. 大白书原题.比較考验代码功底. code: /* * @author Novicer * language : C++/C */ #include<iostream> #include<sstream> #i…
题意:一条河岸线y=k,y>k区域有n个敌人,现在要在y<=k区域布置S个狙击手,狙击手的狙击范围为距离自己半径为D的圆内,问满足能够狙死所有的敌人的情况下,离河岸线最近的那个狙击手的离河岸线的最大距离是多少. 解法:求最小值最大的问题.二分这个距离,如果距离为x,那么最好是狙击手都站到y=k-x处,可以最大范围地打到敌人. 然后check的时候求出每个敌人在y=k-x线上的能够打到他的狙击手范围,为[Xi-sqrt(D^2-(Yi-k+x)*(Yi-k+x),Xi+sqrt(D^2-(Yi-…
n个区域,每个区域有我方军队a[i],a[i]==0的区域表示敌方区域,输入邻接矩阵.问经过一次调兵,使得我方边界处(与敌军区域邻接的区域)士兵的最小值最大.输出该最大值.调兵从i->j仅当a[i]>0&&a[j]>0&&adj[i][j]==true;感觉有点像玩三国志什么的... 赛后才知道是网络流..网络流的构图真妙...给我方建个超级基地,然后把敌方的区域合并成汇点.. 从超级基地连一条边到我方所有区域,流量为a[i]-1,限流该区域的答案,然后i…
题意:一个NxN的网格地板,有一些激光束从天花板垂直射向地面的某个网格,一个圆要安全地从左走到右,不碰到上边界,下边界以及激光束,问这个圆的直径最大能达到多大. 分析:可以二分直径,关键在check函数的写法.可以讲这个圆缩成一个点,把圆的直径转化为激光的扫描范围,当激光范围完全堵死一条通道的时候,这个直径则是不可行的.怎样判断是否堵死一条通道了呢.每次check(dis)的时候,枚举激光束对,如果激光束之间距离小于dis,那么它们两个之间建一条边.还要注意处理边界,如果激光束范围与上边界或下边…
刚刚开始想的是用二分的方法做,没想到这个题目这么水,直接暴力就行: 代码: #include<cstdio> #include<algorithm> #define maxn 1000005 using namespace std; int num[maxn]; int main() { int x,n,y,ma; while(scanf("%d",&x)!=EOF) { ma=x*; scanf("%d",&n); ;i&l…
题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=4536">点击打开链接 题意: 给定n*n的棋盘, 能够在'.'上摆 象棋中的车(X是墙壁) 使得随意两个车都不能互相攻击到 问:最多能摆多少个车. 思路: 二分匹配 1.若没有X.那么做法就是 X点集为行,Y点集为列,对于图上的每一个点所在的行和列(x,y) 建一条边 x->y 2.有了X,那么对于每一个点所在的上方能接触到的X必须…
题目链接 题意 机场有两种飞机,每小时一些飞机到达,每小时安排一架飞机起航.求任意时刻中两种飞机数目的最大值的最小值. 分析 首先肯定是二分来做.这里的难点在于如何判断飞机数目是否合法.一开始忽略了某时刻会有某种飞机并不能起飞的情况,所以不能简单粗暴地只算总数.应该同时记录两种飞机的在每个时刻的可起飞数. #include <bits/stdc++.h> using namespace std; + ; int a[maxn], b[maxn]; bool judge(int mid, int…
题目链接 题意 有n个任务,每个任务有三个参数ri,di和wi,表示必须在时刻[ri,di]之内执行,工作量为wi.处理器执行速度可以变化,当执行速度为s时,工作量为wi.处理器的速度可以变化,当执行速度为s时,一个工作量为wi的任务需要执行wi/s个单位时间.任务不一定连续执行,可以分成若干块.求出处理器执行过程中最大速度的最小值. 分析  求最大值的最小值,一定要想到二分.这题的难点在于如何判断某个速度是否合法.想想电脑进程的执行过程,是分时间片进行的,那么,我们可以一秒一秒的计算,每个时刻…