- 博客(51)
- 收藏
- 关注
原创 NEUOJ 1660 (容斥+矩阵)
1660: Sequence时间限制: 5 Sec 内存限制: 128 MB提交: 13 解决: 3[提交][状态][讨论版]题目描述Easy question once more! define f(n) = f(n-1) + f(n-2) (n>=3), f(1) = f(2) = 1you task is calculating g(n) = sigm
2015-11-30 21:00:41 302
原创 HDU 3124 (二分+扫描线 最近圆对)
MoonmistTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1837 Accepted Submission(s): 618Problem DescriptionAn Unidentifie
2015-11-30 16:41:11 610
原创 POJ 2932 (扫描线)
#include #include #include #include #include #include #include using namespace std;#define maxn 81111#define pb push_back#define mp make_pairdouble x[maxn], y[maxn], r[maxn];int n;bool
2015-11-30 13:08:13 368
原创 HDU 5584 (数学)
LCM WalkTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 87 Accepted Submission(s): 46Problem DescriptionA frog has just learn
2015-11-29 23:58:30 682
原创 codeforces 601C (概率DP)
C. Kleofáš and the n-thlontime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputKleofáš is participating in an n-
2015-11-29 22:46:55 452
原创 POJ 2031 (最小生成树)
题意是n个球求MST,球相交或者相切距离认为是0.#include #include #include #include #include using namespace std;#define maxn 111struct yuan { double x, y, z, r;}p[maxn];struct node { int u, v; doub
2015-11-28 11:38:56 390
原创 codeforces 601B (单调栈)
题意是给你n个数,和q个询问,每次都求出L到R中所有子区间的L(l, r)的和。首先L函数可以看成是两点之间的倾角或者俯角,在一个区间里倾角或者俯角最大的一定是两个相邻的点。证明:对于三个点i, j, k(i即(1),整理以后得到k*h[j] - k*h[i] - i*h[j] 得到,也就是j到k 的角度大于i到k的角度,这和假设产生了矛盾。当然如果(1)式的不等号后半部分分子
2015-11-25 17:33:13 439
原创 codeforces 602B (队列)
题意是给一个序列寻找最长的子区间使得子区间中最大元素和最小元素的差小于等于1用队列瞎搞,先把序列处理一下,把有相邻元素相同的合并,把每个元素依次放进队列里。如果队列是空,直接放进去;如果这个元素和队尾元素差大于1,就清空队列,计算一次区间长度;否则就用即将入队的元素和队次尾元素比较。(因为维护的队列里面的元素必定满足abababab型)#include using namespace
2015-11-25 11:08:21 713
原创 codeforces 601A (最短路)
本来很水的题目做的时候居然卡了题意被卡掉了~题意是n个城市之间任意两个城市间要么有火车线路要么有汽车线路,要从1出发到n,而且火车和汽车不能同时到达一个城市,问两者都到达的最短时间。肯定有一种车可以从1直接到达n,并且这样肯定是最优的判断另一种能不能到达n就行了。#include using namespace std;#define maxn 411#define INF 11
2015-11-25 11:05:41 881
原创 codeforces 599C (树状数组)
题意是给你n个城堡,最多能把他们分成几个连续的区间使得每个区间按照高度排序完以后整体高度也是升序用某种数据结构维护一下去前缀和就行了#include using namespace std;#define maxn 111111int c[maxn];struct node { int num, pos; bool operator < (node a) cons
2015-11-25 00:05:50 409
原创 HDU 1828 (扫描线)
这个是求矩形并的周长,也用扫描线来搞,但是排序的时候不同于面积,在两条线的高度相同是需要优先把下边放在前面(不然有的横边会被多算)。#include #include #include #include #include using namespace std;#define maxn 5111#define pl c<<1#define pr (c<<1)|1#define
2015-11-24 19:26:44 361
原创 POJ 1389 (扫描线)
#include #include #include #include #include using namespace std;#define maxn 2222#define pl c<<1#define pr (c<<1)|1#define lson tree[c].l,tree[c].mid,c<<1#define rson tree[c].mid+1,tree[c].
2015-11-24 01:15:47 263
原创 POJ 1389 (扫描线)
第一题扫描线,连离散化都不用0.0#include #include #include #include #include using namespace std;#define maxn 51111#define pl c<<1#define pr (c<<1)|1#define lson tree[c].l,tree[c].mid,c<<1#define rson tr
2015-11-23 22:13:17 322
原创 HDU 1027 STL
#include using namespace std;#define maxn 1111int a[maxn];int n, m;int main () { while (scanf ("%d%d", &n, &m) == 2) { for (int i = 0; i < n; i++) a[i] = i+1; m-
2015-11-22 10:14:11 353
原创 HDU 5531 (平面几何 三分)
题意是给你n个点,然后要求以每个点为圆心画一个圆,使得两两相邻的圆心的圆相切,不相邻的圆可以相交,如果可以作这样的圆那么输出圆面积和的最小值和,每个圆的半径,否则输出IMPOSSIBLE。首先我们求出每一条邻边的长度,记为l1, l2, l3, ... ,ln, 假定第一个圆的半径为x,那么我们可以用x表示所有圆的半径,分别为x, l1-x, l2-l1+x, l3-l2+l1-x ....
2015-11-19 20:56:19 743
原创 UVA 11426 (欧拉函数)
白书125页例题。gcd(x,n)所有可能的值是n的约数,要满足gcd(x,n) = i(i是n的约数)必然有gcd (x/i, n/i) = 1,也就是ph(n/i)的值。也就是对于每一个数i,如果i是n的约数,那么i在以n结尾的gcd中出现phi(i)次,这就是i对答案的贡献。 #include using namespace std;#define maxn 4000000l
2015-11-19 14:53:57 358
原创 UVAlive 4119 (数学)
白书123页的例题,如果不看书上的证明自己写真是写不出来,好厉害~#include using namespace std;#define maxn 111char P[111111];int xishu[maxn]; //每一个指数下的系数long long mod;void deal () { int l = strlen (P); memset (xish
2015-11-18 23:39:49 467
原创 NEU 1252 (拆位)
题目很水意思是求区间内的与和。很容易想到用在线线段树或者RMQ或者离线树状数组搞,但是我偏偏不用这些数据结构。可以把每个数拆位求每一位的前缀和,如果这一位的区间的和刚好等于区间长度那么与和的结果这一位就是1,否则这一位就是0.#include using namespace std;#define maxn 111111int sum[maxn][66]; //1到i的二进
2015-11-18 16:50:07 344
原创 HDU 1011 (树背包)
坑点是特判。#include using namespace std;#define maxn 111#define maxm 222struct node { int from, to, next;}edge[maxm];int bug[maxn], brain[maxn];int n, m, head[maxn];int ans;int dp[maxn][max
2015-11-18 16:19:06 309
原创 HDU 5534 (多重背包)
题意是让你构造一棵树使得这棵树的价值最大。树的价值等于节点价值的和,节点的价值等于度数i的函数f(i)。首先n个点的树只需要总度数为2×n-2并且每个点的度数都为正那么这棵树肯定存在。很容易想到的是用一个二维的DP去搞,DP[i][j]表示已经搞了i个点总共用j度的最大价值。但是这样要枚举三重循环复杂度太高了。可以把每个点预先都放上1度,然后就变成n-2度的总度数最大价值是多少。注意放
2015-11-17 23:27:22 467
原创 HDU 2191 (多重背包)
水题,还可以用滚动数组~#include using namespace std;#define maxn 1111#define INF 11111111int dp[111]; //花i钱的最大收益int tot, n, m, sum;struct node { int w, cost;}p[maxn];int main () { //freopen
2015-11-17 19:04:48 296
原创 HDU 2844 (多重背包)
题意是给你n个价值和对应的数量,问1到m之内有多少价值可以构造出来。很裸的多重背包。#include using namespace std;#define maxn 111111bool dp[maxn];int a[maxn];int p[maxn], tot, n, m;int main () { //freopen ("in", "r", stdin);
2015-11-17 17:41:20 290
原创 HDU 1059 (DP)
题意是有价值1-6的大理石,告诉你每种价值的个数问能不能分成总价值相同的两堆。首先每种石头需要计算的个数不会超过6个。比如对于1,如果最后分成的两堆都有1,那么我们可以预先把相同数量的1拿掉,最后使得只剩下某一堆中含有1,那么最多含有多少呢?应该是5。因为如果有大于等于6的1,那么我们总可以在另一堆中拿掉一块大理石,那后这一堆中拿掉相应数量的1补偿。所以1最多只有5块。比如对于2,同样
2015-11-16 23:51:41 279
原创 HDU 2298 (三分)
题意是bob在(0,0)位置要射到(x,y)位置的目标,重力加速度是9.8,告诉你子弹的速度问能不能击中目标,能的话输出最小出射角度,否则输出-1。子弹到达横坐标为x的时间是x/v*cos(θ),然后可以
2015-11-16 21:40:25 379
原创 HDU 3400 (三分)
题意是给你两个线段,给你线段上走的速度和线段外走的速度,然后求A到D的最小时间。先三分第一条线段上的点,然后把这个点定下来三分求出第二个线段上的点的最小时间。#include using namespace std;#define eps 1e-8#define pi acos (-1)struct point { double x, y; point (doub
2015-11-16 20:53:32 332
原创 HDU 2438 (三分)
不知道为什么要加特判才能过~~#include using namespace std;#define eps 1e-10#define pi acos (-1)double x, y, l, d;double f (double t) { return tan (t)*(-y) + l*sin (t) + d/(cos (t)) - x;}double solve
2015-11-16 18:14:51 293
原创 HDU 2899 (二分 或者 三分)
水题#include using namespace std;#define eps 1e-7double y;double f (double x) { return 42*x*x*x*x*x*x + 48*x*x*x*x*x + 21*x*x + 10*x - y;}double f2 (double x) { return 6*x*x*x*x*x*x*x
2015-11-16 12:49:28 323
原创 HDU 1115 (平面几何 重心)
用重心公式 x0 = Σ(xi*mi)/m, y0 = Σ(yi*mi)/m,其中mi用有向三角形的面积表示,也就是叉积的一半。#include using namespace std;#define eps 1e-10#define maxn 1000500struct point { double x, y; point (double _x = 0,
2015-11-16 10:47:21 411
原创 HDU 3127 (DP)
写过的最坑的题目。题意很不清楚,意思是把一块布横向或者纵向切割,如果得到一块长xi,宽yi的布就可以得到vi的价值。首先每两次切割都必须得到一块有价值的布(题目哪里有说啊)。然后就很简单了暴力枚举。坑爹的是long long 死活wa 改成int居然就好了也是瞎了狗眼。#include using namespace std;#define maxn 33struct
2015-11-13 15:44:24 352
原创 HDU 2202 (旋转卡壳)
#include #include #include #include #include using namespace std;typedef unsigned long long ll;#define maxn 51111#define pi acos (-1)#define rotate Rotateconst double eps = 1e-8;int dcmp (
2015-11-12 23:30:07 461
原创 HDU 3934 (旋转卡壳)
题意是给你100w个点,求面积最大的三角形。三角形的三个点显然必选是凸包的顶点,先求出凸包。然后100w个点怎么想都想不出nlgn的算法,然后n^2的居然过了,然后看了下网上的题解居然有n^3过的也是瞎了狗眼。n^2的可以这么搞,暴力枚举两个点,然后第三个点用旋转卡壳寻找,所以总体复杂度是n^2。坑爹的是我用了double居然MLE,然后所有的double改成了float就好了。
2015-11-12 17:19:48 520
原创 HDU 4946 (凸包)
题意是有n个人,每个人有一个坐标和速度,平面上如果的点如果他到达的时间严格的比其他任何人都快,那么这个点就属于他管辖。问每个人的管辖区域是不是无穷大。显然对于两个速度不同的人,速度小的人就不可能是无穷大。所以只需要找出速度最大的所有的人。先求出凸包,凸包的顶点是无穷大,然后找到所有凸包边上的点,这些点也可能是无穷大。然后暴力枚举所有的速度最大的点,如果和目前认为是无穷大的点重合,显
2015-11-12 11:39:09 285
原创 POJ 1228 (计算几何 凸包)
题意是给你n个点,问它们构成的凸包能不能扩大了。板子题,暴力枚举凸包每条边,只要每条边上都有点(不包含端点),那么这个凸包就不能扩大,否则肯定能扩大。特判1个点和2个点的凸包。#include #include #include #include #include using namespace std;typedef unsigned long long ll;#defin
2015-11-12 11:00:51 352
原创 POJ 3348 (凸包)
题意是求凸包的面积。没什么坑, 板子题#include #include #include #include #include using namespace std;typedef unsigned long long ll;#define maxn 51111#define pi acos (-1)#define rotate Rotateconst double
2015-11-11 13:30:56 367
原创 HDU 1392 (计算几何 凸包)
题意是给你n个点求凸包的周长。坑点是当凸包上的点只有两个的时候只要求一条线段的长度。#include #include #include #include #include using namespace std;typedef unsigned long long ll;#define maxn 51111#define pi acos (-1)#define rota
2015-11-11 11:38:59 398
原创 UVALive 4728 (凸包 旋转卡壳)
板子题 每个正方形加进去4个点。#include #include #include #include #include using namespace std;typedef unsigned long long ll;#define maxn 411111#define pi acos (-1)#define rotate Rotateconst double eps
2015-11-11 10:28:45 388
原创 POJ 2178 (凸包 旋转卡壳)
题意是求平面最远点对距离的平方。旋转卡壳的板子题。#include #include #include #include #include using namespace std;typedef unsigned long long ll;#define maxn 51111#define pi acos (-1)#define rotate Rotateconst
2015-11-11 10:01:59 528
原创 UVA 10256 (计算几何 凸包)
特判一下凸包的退化情况就行了。#include #include #include #include #include using namespace std;typedef unsigned long long ll;#define maxn 511#define pi acos (-1)#define rotate Rotateconst double eps = 1
2015-11-11 00:04:24 461
原创 POJ 2826 (计算几何)
堆坂子的题目。判断线段相交,共线视为不相交。求出交点,然后判断在上面的那条线段有没有覆盖住下面的那条线段。最后输出面积的时候小心输出-0.00的情况。#include #include #include #include #include using namespace std;typedef unsigned long long ll;#define maxn 11
2015-11-10 21:37:38 503 1
原创 UVA 11168 (计算几何 凸包)
坑点是凸包的点只有2个的情况。#include #include #include #include #include using namespace std;typedef unsigned long long ll;#define maxn 111111#define pi acos (-1)#define rotate Rotateconst double eps
2015-11-10 20:24:02 354
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人