下面是另一道搜索题目的解答过程题目是<算法问题实战策略>中的一题oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/PICNIC大意如下 输入 输出 也是上来就撸一把DFS全部能够匹配完成则计数增加1但是有很多重复计算我试过记录关系对的时候 以数值大小为序 只能排除一部分重复计算错误的代码: #include <iostream> #include <vector> #include <algorithm…
这篇文章着力来讨论线段相交这一个问题. 给出两条线段,如何判断这两条线段相交? 如果这两条线段相交,如何求其交点? 线段相交问题通常由于其繁杂的情况种类而让人避而远之,在这里希望通过笔者的简化讨论希望帮读者的思路进行一下梳理. 首先我们尝试画几个几何图像来找一下线段相交的一些不同的情况,这里需要注意,可能有读者会好奇,这些直观上来看没什么差别的相交情况,我们为什么为认为他们是不同的呢?答案是,这里我们需要将几何特征用代数表达是进行判断,因此不同的几何特征虽然都表示线段相交,但是对应的代数表达式不…
关于这一章节<算法实战策略>有一段概述问题,我认为对于编程人员来说非常有价值,故在这里进行如下的摘抄: 构想算法是很艰难的工作.相比大家都经历过,面对复杂的要求只是傻乎乎地盯着显示器,或者不经过深思熟虑就开始打键盘,结果还要辛辛苦苦修改变得一塌糊涂的代码.经过这些磨难,各位就能切身体会到设计算法的重要性. 与通常所想不同,支配设计算法的并不是一时的灵感,而是许多策略性的选择.构想算法不仅需要理解问题的特性,还要理解执行时间和占用内存空间之间的对立关系,而且要会选择适当的数据结构. 算法设计范式…
这一章节主要介绍我们在进行数值分析常用的二分.三分和一个近似求解区间积分的辛普森法. 首先介绍二分. 其实二分的思想很好理解并且笔者在之前的一些文章中也有所渗透,对于二次函数甚至单元高次函数的零点求解.线段树还有<algorithm puzzle>当中的“切割钢条”问题,都是基于二分思想. 下面我们通过具体的问题来应用二分这种数值分析的策略. Ex1:按揭贷款 以P%的年利率借贷N元后,在M个月内,以每月还C元的方式还贷.贷款期限内,按照如下形式计算贷款余额. (1)    贷款余额从余额N元…
                                                      That Nice Euler Circuit Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 1977   Accepted: 626 Description Little Joey invented a scrabble machine that he called Euler, after the great…
基本的网络流模型: 在图论这一块初步的应用领域中,两个最常见的关注点,其一时图中的路径长度,也就是我们常说的的最短路径问题,另一个则是所谓的“流问题”. 流问题的基本概念: 首先给出一张图. 其实所谓“网络流”,其模型是非常有现实意义的.我们将该图视为计算机网络结构.此图中,s称其为源点而t称其为汇点.这个图中剩余的源泉代表网络设备,连接个顶点的边线表示连接两个设备的数据线缆,边的权值表示这条线缆能够传输的最大数据. 首先我们应该能够注意到,有向路径<s,t>就是一条传输路线,而这条传输数据的…
题意:从左至右给你n个正方形的边长,接着这些正方形都按照旋转45度以一角为底放置坐标轴上,最左边的正方形左端点抵住y轴,后面的正方形依次紧贴前面所有正方形放置,问从上方向下看去,有哪些正方形是可以被看到的(如图) 题解:首先找到每个正方形左右端点的坐标转化为一条线段,接着寻找哪些线段被其他某些条线段覆盖,那这些被覆盖的线段就不能被看到了 寻找被覆盖的线段利用区间贪心,我们按照左端点升序.左端点相同右端点降序排序,则左端点一定被前面的线段覆盖,接着对于右端点使用单调栈的思想寻找可以看到的线段就好…
Q1: 数字游戏: 两个人(A.B)用n个整数排成的一排棋盘玩游戏,游戏从A开始,每个人有如下操作: (1)    拿走棋盘最右侧或者最左侧的棋子,被拿走的数字从棋盘中抹掉. (2)    棋盘中还剩下两个以上的数字的时候,可以把棋盘最右侧或者最左侧的两个数字抹掉 当棋盘上的所有数字消失之后,游戏结束,谁拿的棋子代表的整数之和较大谁赢,现在假设两个游戏者都是聪明的,给出长度为n的序列,请计算游戏结束之后A的分数和B的分数的差值. 分析:其实相似的问题在<训练指南>当中曾经分析过,那个题目叫做“…
Q1:偶尔在电视上看到一些被称为“神童”的孩子们背诵小数点以后几万位的圆周率.背诵这么长的数字,可利用分割数字的方法.我们用这种方法将数字按照位数不等的大小分割后再背诵. 分割形式如下: 所有数字都相同——难度为1——示例:3333,555 数字逐个单调递增或递减——难度为2——示例:23456,3210 两个数字交替出现——难度为4——示例:323,54545 等差数列——难度为5——示例:147,8642 其他情况————难度为10——示例:17924.331 那么现在给出一定位数的圆周率,…
这一章节开始介绍一个数据结构中的一个基本概念——树. 我们从数据结构的解读来解释树结构的重要性,现实世界的数据除了最基本的线性结构(我们常用队列.数组和链表等结构表征),还有一个重要的特性——层级结构需要我们去表征,例如世界杯的对阵表.遗传系谱图等等,这时候我们基于对现实世界的抽象,会很自然的理解为什么会有树这样一个数据结构. 而树这种数据结构也是能够分类的,我们将每个节点记录某种抽象的概念或者具象的事物,这样用来表征一种从属关系,我们称其为抽象型数据结构的树.或者将每个节点储存一些数据,基于这…
You are to write a program that has to decide whether a given line segment intersects a given rectangle. An example: line: start point: (4,9) end point: (11,2) rectangle: left-top: (1,5) right-bottom: (7,1)  Figure 1: Line segment does not intersect…
地址 https://algospot.com/judge/problem/read/QUADTREE 将压缩字符串还原后翻转再次压缩的朴素做法 在数据量庞大的情况下是不可取的 所以需要在压缩的情况下进行翻转 图片可以分成四块 每块在颜色不统一的情况下又会分成四块 那么翻转也可以采取这种逐步将问题分解成小块翻转 然后再处理大块算法 最后的到结果的算法 代码如下 #include <iostream> #include <string> using namespace std; /*…
地址 https://algospot.com/judge/problem/read/DICTIONARY 解法 构造一个26字母的有向图 判断无回路后 就可以输出判断出来的字符序了 比较各个字母的先后次序不必用一个单词分别同其他单词比较 只需要将临近的两个单词一一比较即可 证明如下 算法1 中判断有无回路 采取的是DFS方法 代码 #include <iostream> #include <string> #include <vector> #include <…
地址 https://algospot.com/judge/problem/read/MEETINGROOM 解答  2-sat 代码样例过了 没有ac. 我又没有正确代码对拍..... 已确认是输出问题 修改完成 #include <algorithm> #include <iostream> #include <vector> #include <stack> using namespace std; vector<vector<int>…
数组上的一个基本优化——部分和: 对于一定长度的数组,我们想不断访问这个数组上的某个区间的和,我们能够怎么做呢?这里先不去谈一些数据结构在这个问题上的优化处理.首先我们最简单的一个方法就是穷举出所有区间段然后求值保存起来,但是O(n^2)的时间复杂度并没有太多的实际应用的意义. 这里考虑一个非常简单但是常用的优化方法——部分和. 对于一个数组a[],我们在输入数据的时候,顺便记录数组部分和psum[],而对于部分和数组psum[]的定义如下: psum[i] = ∑a[j] , j∈[1,j].…
Lucas定理: 在组合计数问题中,我们常面临组合数C(n,m)过大而无法直接计算的困境,那么这里的Lucas定理给出了一个较大组合数进行取余运算的一种递归算法. 什么是Lucas定理? Lucas定理的推导证明? 这个推导过程基于二项式定理,基于最后的等式,我们通过过找等是左边和右边x^(tp + r)的系数,即可完成对Lucas定理的证明.但是这里并没有呈现对p为什么是素数的说明. 在这里我们给出Lucas定理的另外一种表达形式: 我个人认为,限定了取模的数p是素数,这样统一了运算,即对于∏…
oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/BOGGLE大意如下 输入输出 输入 URLPM XPRET GIAET XTNZY XOQRS PRETTY GIRL REPEAT KARA PANDORA GIAZAPX 输出 PRETTY YES GIRL YES REPEAT YES KARA NO PANDORA NO GIAZAPX YES 估摸着很简单 就蹭蹭8个方向DFS 代码写完测试用例过了代码如下 #includ…
地址 https://algospot.com/judge/problem/read/BOARDCOVER 解法 DFS 最近似乎在简单DFS上花费太多时间了 首先扫描地图 统计可覆盖的元素个数 如果不是3的倍数 那肯定不能覆盖完全 返回0 然后进行DFS 尝试各种覆盖办法 一共12种(由于必须覆盖完所有元素 就规定从左上角开始覆盖,其实可以只有四种覆盖办法) 每次DFS结束则覆盖方法增加1种  尝试所有覆盖方式后 函数也返回 注意需要寻找每次下一个尝试的覆盖点 规定从左上角开始找起 代码 //…
地址 https://algospot.com/judge/problem/read/FENCE 开始考虑暴力遍历 #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int n; int m; vector<int> h; int func() { ; ; i < h.size(); i++) {…
地址  https://algospot.com/judge/problem/read/WORDCHAIN 解答: 1 书上的解法是制作有向图 然后查找欧拉回路  代码实现稍后 假设一定存在欧拉路径的做法 #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; vector<vector<int>>…
地址 https://algospot.com/judge/problem/read/GALLERY 分析 如图 显然是需要在 0 1 2三个点进行监控即可.(0 2 3 也可) 根据题意,不存在回路,也就是不重复经过两画廊之间的走廊是不可能在两画廊之间进行走动的 我们可以将该图看成一棵树,深度优先遍历时,叶子结点的父节点需要放置摄像头,这样能将叶子结点 父节点和父节点的父节点均可监视到.然后根据有无未监视的子节点 决定当前节点的状态(需要放置,被监视,未被监视) 代码如下 #include <…
地址 https://algospot.com/judge/problem/read/SORTGAME 解答 常规BFS是会超时的  按照书上的提示 应该是打表(居然还有提倡打表的题目) tle 代码 #include <iostream> #include <vector> #include <algorithm> #include <queue> #include <map> using namespace std; int n, m; in…
地址 https://algospot.com/judge/problem/read/CHILDRENDAY 题解 ac代码 #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> using namespace std; //当前顶点的序号为here时 //经过序号为edge的边线能到达的顶点序号是多少 int a…
地址 https://algospot.com/judge/problem/read/NTHLON #include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; int V; //图的邻接表表示法 保存成对(连接的顶点序号 边线加权值) vector<pair<]; ; const int INF = 0x3f3f3…
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=29328#problem/B Area Time Limit: 2 Seconds       Memory Limit: 65536 KB       Special Judge Jerry, a middle school student, ad…
题目链接 关于判断线段相交,具体算法见 点击打开链接 ,先进行快速排斥试验,若不能判断出两个线段不相交,再进行跨立试验. //吐槽1,long long 会溢出... //吐槽2,只进行跨立试验的虽然也可以ac,然而并不能解决两线段共直线且不相交的情况 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include&l…
Jack Straws In the game of Jack Straws, a number of plastic or wooden "straws" are dumped on the table and players try to remove them one-by-one without disturbing the other straws. Here, we are only concerned with if various pairs of straws are…
题目没什么 只是线段相交稍微写的好看了点 Pipe Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1252    Accepted Submission(s): 481 Problem Description 经过激烈的争夺,Lele终于把那块地从Yueyue的手里抢了回来.接下来,Lele要开始建造他的灌溉系统. 通过咨询Lele的…
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7847    Accepted Submission(s): 3834 Problem Description Many geometry(几何)problems were designed in the ACM/…
1264 线段相交 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No".   输入 第1行:一个数T,表示输入的测试数量(1 <= T <= 1000) 第2 - T + 1行:每行8个数,x1,y1,x2,y2,x3,y3,x4,y4.(-10^8 <= xi, yi <= 10^8) (直线1的两个端点为x1,y1 | x2, y2,直线2的两个端点为x3…