自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

morejarphone~

从爱好,到梦想

  • 博客(57)
  • 收藏
  • 关注

原创 HDU5512(水题~)

ICPC沈阳站的D题。一个位置只要能表示为k1*a+k2*b的话这个位置就是能放的。当时傻了想着用扩展欧几里得求出这个k1 k2。其实只要位置能整除gcd(a,b)就可以了。#include using namespace std;#define maxn 4111111int gcd (int a, int b) { return b == 0 ? a : gcd (b, a%b

2015-10-31 22:03:49 440

原创 HDU5521(最短路)

ICPC沈阳站M题,对于每一个集合新建一个点,集合里面每个点到这个点的代价是ti,这个点到集合的每个点代价是0,从1和n出发跑两次最短路就行了。#include using namespace std;#define maxn 4111111#define maxm 21111111#define INF 11111111111111111struct node { int

2015-10-31 21:46:53 427

原创 POJ2398(计算几何)

POJ2318的升级版,就是增加了边界的排序。#include #include #include #include #include using namespace std;#define maxn 5111#define x1 x_1#define x2 x_2#define y1 y_1#define y2 y_2#define find Findstruct

2015-10-30 20:54:20 409

原创 POJ2318(计算几何)

题意是给你n个边界和m个点,求出每一块区域里面点的个数。对于每一个点,算出每条边界在这个y坐标下对应的x坐标,二分查找就好了。#include #include #include #include #include using namespace std;#define maxn 5111#define x1 x_1#define x2 x_2#define y1 y_1

2015-10-30 19:55:43 292

原创 POJ2114(树分治)

题意是给一棵最多1W个节点的树,求是否存在点对使得他们的路径是k。类似于POJ的1741,修改下统计函数就可以了。注释掉的是一开始写的,很挫卡卡过,改掉以后效率好了一点。#include #include #include #include #include using namespace std;#define maxn 111111#define maxm 211111#d

2015-10-30 15:57:59 371

原创 HDU1009(贪心)

水题~按照性价比排序。#include using namespace std;#define maxn 1111int n, m;struct node { double val; int cnt; bool operator < (const node &a) const { return val/cnt > a.val/a.cnt;

2015-10-30 01:16:06 318

原创 POJ1987(树分治)

k的值很大答案应该用long long。#include #include #include #include #include using namespace std;#define maxn 111111#define maxm 211111#define INF 11111111#define size Sizestruct node { int from,

2015-10-30 00:39:39 278

原创 POJ1741(树分治)

#include #include #include #include #include using namespace std;#define maxn 11111#define maxm 21111#define INF 11111111#define size Sizestruct node { int from, to, next, w;}edge[maxm

2015-10-29 23:28:39 350

原创 POJ3714(分治)

题意是给你两堆点,求毎堆点各取一个的最近距离。给毎个点一个属于标记,然后合并的时候判断是不是属于不同的两堆点。#include #include #include using namespace std;#define maxn 211111#define INF 1e15struct node { double x, y; bool belong;} p[

2015-10-29 17:54:25 629

原创 HDU1007(分治)

题意是给你n个点,要扔一个圆,在任何情况这个圆都不能覆盖两个以上的点。求这个圆的最大半径。这个最大直径就是最近的点对距离的一半。算法导论讲的很详细也给出了正确性的证明。#include using namespace std;#define maxn 111111#define INF 1e15struct node { double x, y;} p[maxn], t

2015-10-29 16:52:19 383

原创 HDU4630(树状数组,离线)

题意是给你一个1-n的排列,给q个询问,求每个询问区间里面的最大gcd。先预处理每一个数的因数。然后按照询问的右区间排序,记录到当前询问为止的最左边界,还有某个因子的最右,次右位置,每次这个因子的位置能更新时都用树状数组维护下。#include using namespace std;#define maxn 51111vector fac[maxn]; //每个数的因子int

2015-10-28 18:14:29 716

原创 HDU3953(找规律,坑~)

我做过的最坑的水题,答案是两个数每一位的和。#include using namespace std;int main () { int t, kase = 0; cin >> t; char a[111], b[111]; while (t--) { long long sum = 0; cin >>a >> b;

2015-10-27 23:28:04 465

原创 HDU4607(最大直径 树DP)

题意是给一棵树,从一个点出发走k个点,问最少走几次边。通过一次树DP求出最大直径,如果最大直径能包含k个点就走最大直径,否则每增加一个点就需要多走一条边两次,那么答案就不难想了。#include using namespace std;#define maxn 511111#define maxm 1111111int dp[maxn][2]; //从i出发到叶子节点的最长长度

2015-10-27 22:28:56 343

原创 UEST OJ1222(DFS)

南阳CCPC的H题,意思是给你一个4*4的数独要你填写完整,其中每行没列和每个4快都只有数字1-4。数据很小暴力搞搞。#include using namespace std;#define maxn 11char mp[maxn][maxn];int cnt;struct node { int x, y;}p[22];bool dfs (int pos) {

2015-10-27 00:49:17 311

原创 UESTC OJ1221(DFS)

南阳CCPC的G题,最水的之一。挖掉那些已经死掉的白子,问能不能一步围杀白子。数据很小随便搞。#include using namespace std;#define maxn 11#define move Movechar mp[maxn][maxn];const int move[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};bo

2015-10-27 00:19:28 523

原创 UESTC OJ1220(最短路)

南阳CCPC的F题,题意是有m个战场,n个小镇,曹操可以在第i个小镇调人到x[i]战场,每个人花费c[i]金钱,同时袁绍也会在第i个小镇调同等数量的人到y[i]战场。每个战场有重要程度分别为0,1,2 。2表示战场上曹操的人必须比袁绍多,1表示曹操的人必须大于等于袁绍,0表示没有限制。问满足条件曹操必须至少花费多少。首先建模,只需要保证每个重要战场曹操的人数多一个就行,那么对于每个小镇,从y[

2015-10-26 23:42:48 607

原创 UESTC OJ1217(树状数组)

南阳CCPC的C题。题意是找n个数字的严格上升的长度为m的子串,答案模一个数。用树状数组优化到n*n*lgn就行了,需要注意的是如果相同的数字,我们需要使前面的不影响后面的,也就是在处理相同数字的时候需要优先处理后面的数字,那么我们在排序时当数值一样是需要把位置大的放到前面。#include using namespace std;#define maxn 1111#define m

2015-10-26 21:27:08 683

原创 UESTC OJ1218(DP)

南阳CCPC的D题。题意是长度为L的背包放金条,每个金条有长度和就价值,金条能露出在背包两侧外面但是不能超过长度的一半,求最大的价值。dp[i][j][k]表示处理到i个金条,用了j的长度,有k根露在外面的最大价值,状态转移就只有放,或者放外面或者不放。坑点就是金条长度是奇数会跪需要吧所有的长度预先都乘以2,还有一根金条无论怎样都能放。#include using namespace

2015-10-26 20:27:40 526

原创 HDU4421(2-sat)

拆位,每一位建一次图判断是否可行,如果一次性建完每一位的图然后跑一次2-sat会爆边。#include using namespace std;#define maxn 51111#define maxm 5111111#define index Indexint n;long long b[511][511];struct node { int to, next;}

2015-10-26 20:09:48 342

原创 HDU4283(区间DP)

#include #include #include #include #include using namespace std;#define maxn 111#define maxm 8111111#define INF 11111111111long long dp[maxn][maxn], f[maxn][maxn];int n;long long a[maxn];

2015-10-24 13:50:15 392

原创 POJ1321(状压DP)

数据比较小,怎么暴力都行。#include #include #include #include #include using namespace std;#define maxn 1<<8#define maxm 8111111int n, kk;char mp[11][11];long long dp[11][maxn]; //放到第i行 状态为j 已经放置k个棋子的

2015-10-23 23:14:14 395

原创 POJ3667(线段树区间合并)

题意:给你1到n的区间,初始都能使用,两种操作:1 x :找到最左端的能使用的长度为x的子区间,并使占用这个子区间; 2 x k :使得从x开始长度为k的子区间又能够使用。线段树节点维护从左边开始的最长子区间,从右边开始的最长子区间,总的最长子区间,设三个节点为空标记,全满标记,和有隔断点标记,然后合并区间就很容易了。 #include #include #include #in

2015-10-23 21:36:19 417

原创 HDU4324(拓扑排序)

#include using namespace std;#define maxn 2111#define maxm 8111111int t, n;char mp[maxn][maxn];struct node { int from, to, next;}edge[maxm];int head[maxn];int cnt;bool vis[maxn];int in

2015-10-23 15:18:30 338

原创 HDU3697(贪心)

Bi的范围比1000大,改成5000就过了。#include #include #include using namespace std;#define maxn 3111struct node { double l, r;}p[maxn];int n;bool vis[maxn];int main () { while (cin >> n && n)

2015-10-23 11:08:01 352

原创 HDU4279(数论)

#include #include #include using namespace std;#define maxn 5111const double INF = (1<<31);long double l, r;long long solve (long double x) { if (x < 6) return 0; long long an

2015-10-23 00:11:04 348

原创 ZOJ3822(概率DP)

#include #include #include #include #include using namespace std;#define maxn 51#define INF 1e10double dp[maxn][maxn][maxn*maxn];long long n, m;int main () { int t; cin >> t; w

2015-10-22 16:55:35 432

原创 HDU4800(概率DP)

#include #include #include #include #include using namespace std;#define maxn 511111#define INF 1000000009double dp[11111][150], f[150][150];int n, m, cnt;int a[maxn];int main () { //

2015-10-22 13:44:01 466

原创 POJ2886(线段树)

#include #include #include #include #include using namespace std;#define maxn 511111#define INF 1000000009#define pl c<<1#define pr (c<<1)|1#define lson tree[c].l,tree[c].mid,c<<1#define rs

2015-10-22 11:38:36 365

原创 HDU4791(线段树+二分)

#include #include #include #include #include using namespace std;#define maxn 111111#define INF 1000000009#define pl c<<1#define pr (c<<1)|1#define lson tree[c].l,tree[c].mid,c<<1#define rs

2015-10-21 23:44:02 354

原创 UVALive 4651(DP)

题意是给你n个点,你需要从第一个到第n个点连一条折线,折线中间按顺序经过若干个点,并且折线外的点离这条折线的最近距离需要小于D。需要求这条折线的最小长度。DP[i][j]表示到第i个点为止折线上有j条线段的最短长度,那么DP[k][j+1] = min (dp[k][j+1], dp[i][j]+distance (i, j)), 其中k>i,并且在线段ik之间的每个点都满足点到线段的距离小于

2015-10-20 12:08:59 263

原创 HDU5239(线段树,找规律,快速乘法)

题意是给n个数,m个询问,每次输出之前的值加上此时询问区间的值,然后区间的数字都平方。然后发现所有的数字平方到一定次数以后如果继续平方取模就不会变化了,用这个规律可以在线段树节点维护平方次数,大于某一值时可以以后的更新可以直接忽略。坑点是模数很大,需要把平方转化成类似快速幂的加法。#include using namespace std;#define maxn 111111#d

2015-10-13 20:52:38 436

原创 HDU5236(概率DP,贪心)

题意是敲n个字符,每次敲有p概率崩溃返回上一次的保存状态,保存需要按下x个建。求最小的按键次数的期望。求出敲n个字母的期望后枚举分成i段,要使得尽量均匀。#include using namespace std;#define maxn 111111#define INF 1e20double dp[maxn], f[maxn];double p;int x, n;doub

2015-10-13 17:49:09 467

原创 NEU1579(斜率优化)

2015辽宁省赛的一道题,题意是给定n个人的坐标,要炸死他们,每一个炸弹可以投在任意位置炸死半径范围为R(R自己决定)的所有人,代价为a*r*r+b*r+c,问炸死所有人的最小代价。显然DP[i] = min (DP[j-1]+a*R*R+b*R+c) 其中R = (r[i]-r[j])/2.0, 这里j#include #include #include #include #in

2015-10-13 12:28:15 309

原创 HDU3507(斜率优化)

#include #include #include #include #include using namespace std;#define maxn 511111long long sum[maxn];long long dp[maxn];int n, m;long long a[maxn];int que[maxn], head, tail;long long

2015-10-12 23:34:50 533

原创 HDU4460(最短路)

题意很简单,求所有两点间最短路的最大值。暴力n次spfa。#include #include #include #include #include #include #include #include using namespace std;#define maxn 1111#define maxm 21111#define INF 111111111struct

2015-10-11 21:24:52 622

原创 HDU5245(概率DP)

题意是在一个m×n的矩阵李随机选择两个点作为一个子矩阵斜边端点并且给这个子矩阵涂颜色。问k次涂色后矩阵中涂色的方块的个数的期望。方块个数的期望就是k步后每个方块已经被涂色的概率的和。预先计算出每个方块一次中被涂色的概率。坑点就是小心爆int,我一气之下都改成了long long。#include #include #include #include #include us

2015-10-11 12:27:37 381

原创 HDU5242(树DP)

题意是取k个点,每次累加从根到这个点的权值的和,最多只能加一次,问最大能得到多少。用sum[i]表示i到叶子节点的最大的路径上的和,son[i]表示和最大的路径上的i的孩子,father[i]表示和最大的路径上的i的父亲。#include #include #include #include #include using namespace std;#define maxn 1

2015-10-10 21:23:38 287

原创 HDU3395(最大权匹配)

题意是给你n条鱼,每条鱼有个值,每条鱼只能和一条自己认为可以的鱼交配,只能被一条鱼交配(一个是主动的一个是被动的)。生下的孩子的值是他们的异或和,求所有孩子和的最大值。mp[i][j]=1表示i鱼认为j鱼可以交配。没什么坑点,裸题。#include #include #include #include #include using namespace std;#define

2015-10-09 21:30:13 362

原创 HDU4771(BFS)

题意是给一个n*m的地图,@表示起点,告诉你一些宝藏的坐标,求获得这些宝藏的最小步数。题目里没有坑的数据,也就是不用考虑:1.起点有宝藏2.陷阱有宝藏3.某个点有多个宝藏。直接BFS就行了。#include #include #include #include #include using namespace std;#define pi acos (-1)#

2015-10-09 14:41:47 343

原创 HDU5120(平面几何)

求两个圆环的相交面积。容易知道相交面积=两个大圆相交面积+两个小圆相交面积-2*大圆和小圆相交面积。#include#include#include#include#includeusing namespace std;double x1,ya,x2,y2;double dis;double s1,s2,s3;double R,r;double sov(double R

2015-10-07 19:29:01 461

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除