
POJ
PeterBishop0
一起进步!
展开
-
2932扫描线
题意:有n个圆 依次给了半径和圆心坐标 保证输入的圆不相交(只有 相离 和 内含/外含 的情况) 问 有几个圆 不内含在其他圆中,并分别列出这几个圆的编号(1~n) (n的范围是[1, 40000])案例画出来大概是这样的(那个原点为(50,50)的太远了,就意思一下)所以答案是3号圆和5号圆 不被包含好了,若这道题n只有1000,那么只要f...转载 2019-10-22 13:47:34 · 305 阅读 · 0 评论 -
1981 单位圆套点
极限情况所谓极限情况就是单位圆上有两个点,稍微动一下就会损失一个点,覆盖点最多的圆一定有一个是这种圆(当然当N=1的时候是个例外)。朴素想法是先固定两个点,然后枚举其他的点是否在这两个点决定的两个圆内,朴素得掉渣我就不写了。更快的算法是,先只固定一个点i,该点的单位圆与其他点j的单位圆相交,形成i圆上的一段弧,该弧被j圆覆盖。最终圆如果在该弧上,则一定能覆盖j点。那么问题归结于找出i圆上...转载 2019-10-22 13:44:14 · 325 阅读 · 0 评论 -
1811 Prime Test (Rabin-Miller强伪素数测试 和Pollard-rho 因数分解)
DescriptionGiven a big integer number, you are required to find out whether it's a prime number.InputThe first line contains the number of test cases T (1 <= T <= 20 ), then the following ...原创 2019-10-22 13:33:30 · 670 阅读 · 0 评论 -
2429 GCD & LCM Inverse pollard_rho大整数分解
/*我们知道,对于两个数a,b和他们的最大公约数gcd以及最小公倍数lcm,有lcm=a*b/gcd,进一步变形可以得到:(a/gcd * b/gcd)*gcd=lcm,即(a/gcd * b/gcd)=lcm/gcd,我们令m=a/gcd,n=b/gcd,那么问题就变为了:找出两个互素的整数,使他们的乘积为key=lcm/gcd。我们可以用pollard_rho大整数分解的方法找出lcm/g...原创 2019-10-22 13:32:02 · 358 阅读 · 0 评论 -
1930循环小数化分数
/*思路:要用到数论,一开始也不懂,贴在这里吧一,纯循环小数化分数:循环节的数字除以循环节的位数个9组成的整数。例如:0.3333……=3/9=1/3;0.285714285714……=285714/999999=2/7.二,混循环小数:(例如:0.24333333……)不循环部分和循环节构成的的数减去不循环部分的差,再除以循环节位数个9添上不循环部分的位数个0。例如:0.243333...原创 2019-10-22 13:28:26 · 609 阅读 · 0 评论 -
1182 食物链(带权并查集)
首先我们要明确并查集的作用:快速判断两个数是否同一集合与快速合并两个集合成一个集合并求出一些节点之间的关系,根据的就是树的特点:每个孩子节点有且仅有一个父节点。这样就用数组记录父节点就还(根就记录自己),合并操作就是合并两个根节点,这儿有个优化就是启发式合并:根记录孩子个数,并把个数少的并到个数大的上面。 不过我们有其他大招:路径压缩,即我们每次查询的时候都把一条线上的所有节点连接到祖先节点...原创 2019-02-17 22:41:49 · 364 阅读 · 3 评论 -
1611 并查集模板(计算指定集合的元素个数)
/* ***********************************************Author :PeterBishopCreated Time :Fri 15 Feb 2019 22:31:03 CSTFile Name :t.cppOrigin :P O J 1611*****************************...原创 2019-02-16 19:57:34 · 536 阅读 · 0 评论 -
2236 模板并查集
题目很简单,但是弄这个输入有点麻烦,手生了/* ***********************************************Author :PeterBishopCreated Time :Thu 14 Feb 2019 16:44:13 CSTFile Name :t.cppOrigin :P O J 2236******...原创 2019-02-14 23:46:51 · 284 阅读 · 0 评论 -
2387(数学曼哈顿距离)
题意:给出n个点及其坐标,求一点到其它点曼哈顿距离总和最小值以及解的个数。两点曼哈顿距离公式:d=|x1−x2|+|y1−y2|,由于两点曼哈顿距离的特性,单独求 x 与单独求 y 互不影响因此,题目即为求 |x−x1|+|x−x2|+…+|x−xn| 的最小值,求 |y−y1|+|y−y2|+…+|y−yn| 的最小值,直接求两者中位数即可。接对 x、y 各自进行排序比较: ...转载 2019-01-21 19:39:02 · 3590 阅读 · 0 评论 -
3268(矩阵转置+Dijkstra)
求两次最短路,第一次求x到其余各点的最短路,第二次求各点到x的最短路。前者易于解决,直接应用Dijkstra或其他最短路算法即可,后者要先将邻接矩阵转置再执行最短路算法。为什么进行矩阵转置?比如u(u != x)到x的最短路为<u,v1>,<v1,v2>,<v2,v3>,...,<vi, x>,这条路径在转置邻接矩阵后变成<x,vi>...原创 2019-01-21 17:11:58 · 421 阅读 · 0 评论 -
3660(传递闭包)
#include <cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;typedef long long ll; int N,M;int mp[110][110];const int INF=0x3f3f3f3f; voi...原创 2019-01-21 14:53:43 · 298 阅读 · 0 评论 -
1251 最小生成树模板题(prim)
注意初始化的cost矩阵,cost[i][i]=0,相互的那个也要初始化/* ***********************************************Author :PeterBishopCreated Time :Tue 19 Feb 2019 22:52:00 CSTFile Name :t.cppOrigin :P O...原创 2019-02-27 22:11:31 · 350 阅读 · 1 评论 -
1287 最小生成树模板
/* ***********************************************Author :PeterBishopCreated Time :Thu 28 Feb 2019 16:46:31 CSTFile Name :t.cppOrigin :P O J 1287*****************************...原创 2019-02-28 17:45:02 · 258 阅读 · 0 评论 -
1308 简单并查集
/* ***********************************************Author :PeterBishopCreated Time :Sun 17 Feb 2019 22:47:11 CSTFile Name :t.cppOrigin :P O J 1308*****************************...原创 2019-02-19 17:06:53 · 261 阅读 · 0 评论 -
2031 几何+MST
只要算出两者距离减去半径之和,就变成平面图了/* ***********************************************Author :PeterBishopCreated Time :Sat 02 Mar 2019 17:18:28 CSTFile Name :t.cppOrigin :P O J 2031*****...原创 2019-03-02 19:29:02 · 337 阅读 · 0 评论 -
1015 好题挺难的(bin巨的思路)
为叙述问题方便,现将任一选择方案中,辩方总分和控方总分之差简称为“辩控差”,辩方总分和控方总分之和称为“辩控和”。第i 个候选人的辩方总分和控方总分之差记为V(i),辩方总分和控方总分之和记为S(i)。现用f(j, k)表示,取j 个候选人,使其辩控差为k 的所有方案中,辩控和最大的那个方案(该方案称为“方案f(j, k)”)的辩控和。并且,我们还规定,如果没法选j 个人,使其辩控差...原创 2019-03-30 10:16:04 · 312 阅读 · 0 评论 -
1458 LCS
经典问题居然给忘了。。。#include <iostream>#include <string.h>using namespace std;//LCS问题int main(){ string s; string t; while(cin>>s>>t) { const char* a =...原创 2019-03-31 19:48:18 · 257 阅读 · 1 评论 -
1661 下台阶(左右方向细节有点烦)
/* ***********************************************Author :PeterBishopCreated Time :2019年04月09日 星期二 19时13分09秒File Name :t.cpp************************************************ */#inclu...原创 2019-04-10 23:20:04 · 265 阅读 · 1 评论 -
3186 简单区间dp
/* ***********************************************Author :PeterBishopCreated Time :2019年04月14日 星期日 10时02分46秒File Name :t.cpp************************************************ */#inclu...原创 2019-04-14 10:39:12 · 323 阅读 · 1 评论 -
2253(Dijkstra变形)
题意:给出两只青蛙的坐标A、B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的。显然从A到B存在至少一条的通路,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中又有一个最大距离。现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。lowcost[i]为起点s到当前点i的路径上最小的最大边;#include <iostre...原创 2019-01-21 12:58:24 · 359 阅读 · 0 评论 -
3074 DLX解决数独
数独的DLX构造:9*9个点每个点有9种选择,这构成了DLX的729行,每行、列、阵有限制,均为9行(/列/阵),然后每行(/列/阵)都有九种数的情况,于是就有了3*9*9列,但是因为一个位置只能选一个,所以又有9*9列,每列连接一个点的九种选数情况。 最终有4*9*9=324列,9*9*9=729行。具体看https://blog.youkuaiyun.com/qq_40061421/arti...原创 2019-01-03 09:47:48 · 794 阅读 · 0 评论 -
1611 并查集模板+简单计数
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int N=30003;int fa[N]; void Make_set(int n){ for(int i=0;i<n;i++) fa[i]=i;} int find_...原创 2018-12-09 21:18:17 · 299 阅读 · 0 评论 -
3414 Pots(bfs搜索加dfs记录过程)
# include<stdio.h># include <queue># include <string.h>using namespace std;# define max 110int A,B,C;char num[12][12] = {"FILL(1)","FILL(2)", "DROP(1)","DROP(2)",&quo原创 2018-07-26 22:20:39 · 321 阅读 · 0 评论 -
3087 Shuffle'm Up(map模拟)
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<map>#include<string>using namespace std;int t;string a, b, c, p;map<stri...原创 2018-07-26 22:09:13 · 252 阅读 · 0 评论 -
3126 PrimePath
#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<algorithm>using namespace std; int n, m;const int N = 1e4 + 100;int vis[N];struct node...原创 2018-07-26 21:52:59 · 383 阅读 · 0 评论 -
1246 Find The Multipl(BFS来打表)
/*代码一:广搜加打表,速度极快,广搜每一位是0还是1,幸好题目的数据范围没有超过int*//*---------------------*/#define N 200 #include<iostream>using namespace std;#include<cstdio>#include<queue>queue<long long&g...原创 2018-07-26 21:35:45 · 273 阅读 · 0 评论 -
2251 Dungeon Master
#include <iostream>#include <stdio.h>#include <string.h>#include <queue>#include <algorithm>using namespace std;char map[35][35][35];//直接用三维数组int vis[35][35][35]...原创 2018-07-25 14:18:39 · 320 阅读 · 0 评论 -
1321 棋盘问题
#include<stdio.h>int n, k;char s[8][8];int ans = 0;int check(int x, int y){ if (s[x][y] == '#') { for (int i = 0; i < n; i++) { if (s[i][y] == '*') return 0; } for (int...原创 2018-07-25 12:58:04 · 342 阅读 · 0 评论 -
3948经典迷宫最短路
#include<cstdio>#include<stack>#include<algorithm>#include<queue>#include<cstring>using namespace std;int maze[10][10];int d[10][10];int visit[10][10];int dx[4]...原创 2018-04-13 22:14:27 · 340 阅读 · 0 评论 -
1426找数字
//Memory Time//2236K 32MS #include<iostream>using namespace std;int mod[524286]; //保存每次mod n的余数 //由于198的余数序列是最长的 //经过反复二分验证,436905是能存储198余数序列的最少空间 ...原创 2018-04-16 21:58:11 · 569 阅读 · 0 评论 -
3984 迷宫问题(bfs记录方向来输出)
#include <iostream>#include <stdio.h>#include <string.h>#include <queue>using namespace std;bool isw[5][5];int a[5][5];int dx[4] = {0,1,0,-1};int dy[4] = {1,0,-1,0};...原创 2018-07-26 23:00:12 · 385 阅读 · 0 评论 -
2054 贪心+并查集
贪心的总体思路是:每次找到一个权值最大的节点,如果它是根节点,则首先对它染色,否则的话我们可以得出一个结论,在对它的父亲已经染色的情况下,立刻给它染色是最优的。现在重点讨论第二种情况,当它不是根节点时,我们如果对它父亲染了色,则一定会立刻对它染色,所以可以把它和它父亲合并为同一个节点,它和它父亲的儿子都成为了新节点的儿子,它的父亲的父亲则是新节点的父亲。为了能继续贪下去,我们给每个节点赋上...原创 2018-10-18 16:53:05 · 320 阅读 · 0 评论 -
1456 Supermarket (贪心, 并查集)
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std; const int N = 10005;struct Node{ int px, dx; friend bool operator<(co...原创 2018-12-09 21:17:05 · 284 阅读 · 0 评论 -
3069 Saruman's Army(简单贪心覆盖问题)
题意:在一条直线上,有n个点。从这n个点中选择若干个,给他们加上标记。对于每一个点,其距离为R以内的区域里必须有一个被标记的点。问至少要有多少点被加上标记。题解:我们从最左边的开始考虑。对于这个点,到距其R以内的区域必须要有带有标记的点。带有标记的点一定在其右侧(包含这个点本身)。给从最左边开始,距离为R以内的最远的点加上标记,尽可能的覆盖更靠右边的点。对于添加了标记的点右侧相距超过R的下一个...原创 2018-12-04 15:10:48 · 356 阅读 · 0 评论 -
1328 区间贪心
主要的思路就是将这个题目转换一下去求。题目上面说,雷达只会在x轴上面,那么我们就可以去算一下大致的几种情况:第一种,雷达全面覆盖的到。那么转换一下思路。第二种,存在几个特殊的,比较高的位置,雷达无法覆盖,就是雷达最高为m,但是他的位置高度超过了m,所以直接输出-1.思路就是我们可以把每一个点转换一下,看成一个圆,去思考一下。如果点可以被覆盖的到,那么圆与x轴就会相交或者相切,以半径为雷...原创 2018-10-22 20:58:12 · 373 阅读 · 0 评论 -
3190 贪心+优先队列(好东西)
题意:有n头奶牛,每头奶牛喝牛奶的时候都不愿意被打扰,告诉你每头奶牛开始喝牛奶和结束和牛奶的时间 a 和 b, 求至少需要多少个隔间,使每头奶牛喝牛奶的时间不相交思路:每头奶牛按照开始的时间从小到大排,每一次如果能安排进最早结束的隔间,则刷新此隔间的结束时间,否则开一个新的隔间 奶牛用结构体存储开始#include<stdio.h>#include<iost...原创 2018-10-17 16:23:22 · 374 阅读 · 0 评论 -
2018 求至少k个连续数 使得平均值最大
题意:找至少连续的k个数,使得这k个数的平均值最大.思路:用两个数组 f[i] num[i], f[i]表示以当前数arr[i]为结尾的最大平均数,num[i]表示个数如何求f[i]呢?当然我们要知道以arr[i]为结尾,且个数>=k的所有情况,然后取其中的最优情况① f[i]=f[i-1]+arr[i]/(num[i-1]+1) num[i]=num[i-1]+1 以...原创 2018-10-20 17:52:46 · 1351 阅读 · 0 评论 -
2021 Relative Relatives
这个题目是从正面推进的,比较简单能理解,只要去把结构体设计好,然后数组表示好久可以啦 #include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>using namespace std;const int MAX = 100;struct in...原创 2018-10-10 15:59:44 · 342 阅读 · 0 评论 -
3784 对顶堆模板题
知识点应用#include<cstdio>#include<queue>#include<functional>using namespace std;priority_queue<int> q1; //大根堆Q1:维护集合中较小值的部分的最大值。priority_queue<int, vector<int>,...原创 2018-10-16 12:12:14 · 354 阅读 · 0 评论 -
3614 贪心 优先队列
奶牛美容:有C头奶牛日光浴,每头奶牛分别需要minSPF_i和maxSPF_i单位强度之间的阳光。现有L种防晒霜,分别能使阳光强度稳定为SPF_i,其瓶数为cover_i。求最多满足多少头奶牛首先得确定一个贪心策略,在满足minSPF的条件下,尽量把SPF小的防晒霜用在maxSPF小的奶牛身上,因为maxSPF大的奶牛有更大的选择空间。用一个最小堆q维护maxSPF的最小值,可以高效解决问题。...原创 2018-10-15 23:58:19 · 324 阅读 · 0 评论