poj1066】的更多相关文章

poj1066 Jugs http://poj.org/problem?id=1606 解题思路:本题可以用数学方法解得,最易理解,常规的解法是搜索.直接用接近模拟的广度优先搜索即可过. 给两个容器,给出最大容量(ca,cb)和目标水量n,可以执行6种操作: (1)把A容器灌满水,操作名:fill A: (2)把B容器灌满水,操作名:fill B: (3)把A容器中的水倒出去,管它倒到哪里去,反正不在这两个容器里面,操作名:empty A: (4)把B容器中的水倒出去,操作名:empty B:…
POJ1066 题意:给出一个100*100的正方形区域,通过若干连接区域边界的线段将正方形区域分割为多个不规则多边形小区域,然后给出宝藏位置,要求从区域外部开辟到宝藏所在位置的一条路径,使得开辟路径所需要打通的墙壁数最少("打通一堵墙"即在墙壁所在线段中间位置开一空间以连通外界),输出应打通墙壁的个数(包括边界上墙壁). 思路:枚举每一个入口,在所有的情况中取穿墙数最少的输出即可,枚举每一个入口的时候,并不用枚举每条边的中间点,直接枚举该线段的两个顶点就行(因为要经过一个墙,那么从线…
做完了才发现,好像没有人和我的做法一样的,不过我怎么都觉得我的做法还是挺容易想的. 我的做法是: 把周围的方框按顺时针编号,然后对于每一条边,如果点出现在边的一侧,则把另一侧所有的点加1,这样最后统计最小值+1即可. 离散化一下 O(n) // // main.cpp // poj1066 // // Created by 陈加寿 on 15/12/30. // Copyright (c) 2015年 chenhuan001. All rights reserved. // #include <…
package practice; import java.util.Scanner; public class TreasureHunt { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int[][] walls; float x, y; int doors = Integer.MAX_VALUE, temp1, temp2; int n = cin.nextInt(); wall…
很好的一道题.题意是,一个正方形围墙内有一些交错的内墙,内墙的端点都在正方形上,在正方形内部有一个点,求从正方形外到这个点的最少要走的门数,门只能是线段的中点. 思路很巧妙,因为从一个点到终点不可能“绕过”围墙,只能传过去,所以门是否开在中点是无所谓的,只要求四周线段中点到终点的线段与墙的最少交点个数即可.更进一步,实际上,只需判断四周围墙的所有点与终点的连线与内墙的最少交点加一即可. 请看下图的红色线,与蓝色线交点,即是上述的交点. #include <iostream> #include…
Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8192   Accepted: 3376 Description Archeologists from the Antiquities and Curios Museum (ACM) have flown to Egypt to examine the great pyramid of Key-Ops. Using state-of-the-ar…
Treasure Hunt Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other) Total Submission(s) : 3   Accepted Submission(s) : 2 Problem Description Archeologists from the Antiquities and Curios Museum (ACM) have flown to Egypt to…
嘟嘟嘟 题意看题中的图就行:问你从给定的点出发最少需要穿过几条线段才能从正方形中出去(边界也算). 因为\(n\)很小,可以考虑比较暴力的做法.枚举在边界中的哪一个点离开的.也就是枚举四周的点\((x, y)\),并和起点\((x_0, y_0)\)连成线段,求和多少条线段相交. 但是因为点可以是实数,所以不知道怎么枚举.不过想想就知道,同一个区间中的点是等价的.因此我们只要枚举线段的端点即可. 至于判断线段相交,用叉积实现:对于线段\(AB\)和\(CD\),如果\((\overrightar…
http://poj.org/problem?id=1066 题目大意:给一个由墙围成的正方形,里面有若干墙,每次破墙只能从(当前看到的)墙的中点破,求最少破多少墙才能看到宝藏. —————————————————————— 显然枚举起点然后画一条以终点为端点的线,求线和多少墙相交即可. 但是我不会证明:这里有证明:https://www.cnblogs.com/anrainie/p/4049844.html 然后有该证明我们得到只要起点为这些线的端点即可. #include<cstdio>…
#include<stdio.h> #include<math.h> const double eps=1e-8; int n; struct Point { double x,y; Point (){} Point (double _x,double _y) { x=_x; y=_y; } Point operator -(const Point &b)const { return Point (x-b.x,y-b.y); } double operator *(cons…