自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ONE MORE TRY

把该做的做好就好了!

  • 博客(82)
  • 问答 (2)
  • 收藏
  • 关注

原创 KM算法萌新讲解篇

KM算法 首先了解问题:也就是最大权值匹配;二分图里,边带了权值,求整幅图里匹配最大/最小的权值 因为接触匈牙利算法的时候看的是找对象系列的博文,所以也自己写一发找对象的博文吧;算法背景:信息学院计算机某班级有5位玉树凌风的男子:小诸,小包,小许,小应,小章;外语学院英语系某班级有5位国色天香的女子:小四,小雨,小美,小丽,小英;名称不重要!强行变成X,Y,23

2016-09-30 15:59:51 4058 3

原创 HDU 3729【二分匹配】

题意: 给出n个同学的排名,代表每个排名在哪个区间,要求保证最多人说的是实话,并在此前提下求一个说真话人最大字典序。 思路: 最后感觉就是点去填区间,点和区间建个边,然后跑个二分图,然后sort一发。#include<cstdio>#include<vector>#include<string.h>#include<iostream>#include<algorithm>using

2016-09-29 00:23:56 363

原创 51nod 1456【强连通,缩点,并查集】

话说这道题的机遇是看到了http://blog.csdn.net/u010885899/article/details/50611895很有意思;然后就去补了这题 题意: 建最少的边使得给出的点相连。 思路: 直观感觉,如果a->b,b->c,那么a->c就不用建了。 然后还有一种情况就是回路a->b->c->a,这样的话要有n条。 所以其实思路就是这样,弱连通的时候n个点就是+n-1条

2016-09-29 00:18:07 510

原创 51nod1459【二级最短路】

标签说的是BFS。。。 太菜,不知道怎么BFS。。。是不是spfa写,就叫BFS。。。感觉不是。。。。 只是二级最短路的写法,直接搞就很容易了,简单题;#include <bits/stdc++.h>using namespace std;typedef long long LL;const int INF=0x3f3f3f3f;const int N=5e2+10;int val[N];

2016-09-27 23:45:10 378

原创 51nod1640 【最小生成树】

题意: 在一副图中,搞N-1条边,使得每个点都相连, 有多种可能的情况,所以求一种使得其中n-1条边的最大是所有可能的最小,然后并保证连接的n-1条边的权值总和最大 思路: 一开始没有看清题意,随便写了一发“最大生成树”连案例都跑不出,原来还有个条件是有n-1条边中的最大值是所有可能的最小。 然后窝就纳闷了。。。怎么搞法搞到一条最大的最小,随便搞了个最小生成树,写着写着发现其实最小生成树里

2016-09-27 23:42:46 581

原创 CodeForces660B【模拟—水】

感觉模拟题用函数分块写比较清晰~传参的话,字符串要么直接全局,或者指针也是容易操作,总之思路清晰,然后分块清晰,模拟wa的少吧。 这题水题,不说了。#include <bits/stdc++.h>using namespace std;typedef long long LL;int n,m;int ma[110][5];void init(){ for(int i=1;i<=n

2016-09-27 23:39:29 355

原创 CodeForces691C 【模拟】

这一题的模拟只要注意前后导零就好了。。。 感受就是。。。 如果是比赛中模拟题打好。。要盯着注意点,测试不同的情况下的注意点。。起码要针对性测试10分钟。。 还是蛮简单的,但是自己打烦了,应该,队友代码窝的一半。。。 思路: 还是搞成a*10^b,然后保证1<=a<10,b!=0;#include <bits/stdc++.h>using namespace std;typedef lo

2016-09-27 23:36:48 504

原创 Codeforces698B【并查集+拆环】

好题,好题,第一次写这个神秘的拆环。。 题意: 给你n个数,第i个数代表点i连向点a[i], 将这副图变成树,求最小改变边的数量; 思路: 已知有向树的定义, 除了根节点外每个节点都有且仅有一条边都指向它的父亲节点, 而根节点有且仅有一条边指向自己。 给出的图类型, 1.环; 2.独立的点; 3.链; 如果是独立的话,就是选定一个根节点然后,让其他根节点指向它; 如果存在环

2016-09-27 23:32:36 664

原创 CodeForces717C 【数学】

题意: 给你n个数既表示a类的值也表示b类的值,然后计算a和b类两两搭配相乘相加,使得答案最小; 思路: 显而易见的方案是最小乘最大,次小乘次大,然后依次下去。。 可以那个特例证明这个是对的#include <bits/stdc++.h>using namespace std;typedef long long LL;const LL mod=1e4+7;const int N=1e5

2016-09-26 22:03:29 478

原创 Codeforces710C【数学】

n阶幻方问题::http://blog.csdn.net/fengchaokobe/article/details/7437767 学一下就好啦~ 奇幻七绝 先填上行正中央, 依次斜填切莫忘。 上格没有顶格填, 顶格没有底格放。#include <bits/stdc++.h>using namespace std;typedef long long LL;int a[50][50]

2016-09-25 20:47:30 391

原创 HDU5904【瞎搞】

哇咔咔,挂完。 靠着hack的100分挂在了rank167。。。 就是memset的问题,超时了;用map好了。。 思路: 标记a串以当前值为尾的上升子序列长度,然后还是搞b串,每次判一下当前值在a串是否有,有的话取小的和ans比较取大;#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>

2016-09-24 22:17:35 379

原创 CodeForces 623B【预处理+DP】

题意: 给出n,a,b以及n个整数a1,a2…an, 可以对数组进行以下两种操作; (1)花费len*a的代价删除连续的len个数,len<|S| (2)花费b的代价将某一个a[i]加一或减一,每个数最多执行一次这样的操作; 使得这个数组所有数的GCD>1; 求最小花费 思路: 因为删除操作不能一下子删完,所以肯定会剩下一个,那么就会是头一个或者最后一个。所以剩下的数可能有a[1]-1

2016-09-23 08:44:22 322

原创 CodeForces 600C【构造】

题意: 在原字符串中修改数量最少,然后保证最小字典序。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=2e5+10;int a[100];char s[N];char ans[N];int main(){ scanf("%s",s); int len=strle

2016-09-23 08:37:05 515

原创 CodeForces 644B【模拟】

题意: 查询数 和 最大的队列容量+1; 按时间顺序 ti代表,第i个出线的时间; di代表,第i个需要处理的时间; 对于第i个输出他所需要的时间完成,或者拒绝进入输出-1; 思路: 真是MDZZ了,模拟。 主要就是开个队列存了一下每个任务结束时间,然后对于每个任务把队列里小于该任务开始时间pop掉,队列里的个数就可以代表当前处理个数了#include <bits/stdc++.h>

2016-09-23 08:33:42 177

原创 hdu5861【线段树】

题意: 有n个点,每个两两之间有一条路,给出每条路开放的花费,每条路只能打开关闭一次,然后m天里给出一个区间代表这条路必须在该天开放,求每天需要的花费。 思路: 这是一题纯粹用线段树搞的题。 我们可以看到:某第i个区间[s1,t1]的打开,如果存在第k(1<=k< i)个区间[s2,t2] (s2 >=s1 , t1>=t2),那么第k区间的所有路必须在[ k , i]时间段内打开。因为一旦

2016-09-23 08:23:23 381

原创 CodeForces 41A+43A【课上无聊刷水题系列】

41Acode 好像只要前一个字符串存在下一个字符串的头单词就YES;#include <bits/stdc++.h>using namespace std;typedef __int64 LL;const int N=1e2+10;int main(){ int len,i,j; char s1[N],s2[N]; scanf("%s%s",s1,s2);

2016-09-21 22:33:20 486

原创 hdoj5493【树状数组+二分】

题意: 给你n个人的高度, 再给出一个值代表该高度下有前面比他高的 或 后面比他高的人数, 求满足条件下的最小字典序, 不行的话输出”impossible” 思路: 对于最小字典序,对于每个位置的最小是=min(k,n-i-k); 先离线排序一下,然后对每个人操作,如果(n-i-k)<0,二分找一下这个位置,然后存一下就好了;#include <bits/stdc++.h>using

2016-09-21 22:29:06 361

原创 HDU5894【组合数学】

题意: 现在 m个考生人需要坐在有n个座位的圆桌上。 你需要安排位置,使得任意两个考生之间相距至少k个位置。 桌子有编号,考生a和b交换位置视作一种方案,问有多少方案,mod 1e9+7。 (0 < m < n < 1e6, 0 < k < 1000) 看网上的= =、真心菜啊; 思路: 先确定一个人的位置,然后其余人的方案得出,然后有n个位置,最后除以重复的/m;#include <

2016-09-21 22:25:45 762

原创 Codeforces643A【一种暴力】

mdzz,今天好烦啊,连特么暴力都不会写了。 题意是:给你n个数(<=n),然后让你求对于每个数输出含有他最多数量的区间数,还有如果存在相等的话,这个区间算小的那个 思路: 暴力起点,然后从小区间处理到大区间,具体就是每次标记,然后之前的答案比较,因为起点掐定,然后小到大。 贴一发队友的code…..#include <iostream>#include <cstdio>#include

2016-09-21 22:13:22 402

转载 CodeForces 689C【二分】

转自: http://blog.csdn.net/qq_26071477/article/details/51892995#include<stdio.h>typedef long long ll;ll check(ll n){ ll res=0; for(ll k=2; k*k*k<=n; k++)//k是ll范围 不可犯糊涂 res+=n/(k*k*k

2016-09-20 22:26:11 392

原创 CodeForces 665B【暴力】

题意(来自网络): 现在有k件商品,每个商品的位置已经告诉你了 现在有n个人,每个人有m个需求,每个需求就是要把第a[i][j]个物品拿到第一个位置来 他的代价是pos[a[i][j]] 问你所有代价是多少 思路: 就是每次+,每次调整,还有滚动数组这种不错欸~#include <bits/stdc++.h>using namespace std;typedef __int64 LL

2016-09-20 22:22:45 465

原创 CodeForces 653A【水】

sort一发,去重#include<cstdio>#include<iostream>#include<queue>#include<string.h>#include<string>#include<map>#include<algorithm>using namespace std;const int N=55;int a[N];int n;int main(){ sc

2016-09-20 22:20:14 84

原创 HDU 3501【欧拉函数拓展求一个数的所有质因子之和】

欧拉函数欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。 通式: 其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。 对于质数p,φ(p) = p - 1。注意φ(1)=1. 欧拉定理:对于互质的正整数a和n, 欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。 若n是质

2016-09-20 22:19:01 1370 2

原创 HDU 3499【最短路】

题意: 给你一幅图,然后起点终点,然后有一个条件是可以使某条边的花费减半,求最短路的最小花费。 思路: (来自大哥) 最短路的时候多一维,途中是否有花费减半的边; 然后转移,如果上一条有减半的,这一条一定只能转移到不能减半,上一条没有减半的,这一条可以减半也可以不减半。 具体处理就是一个二维的处理,网上说分层图,其实我感觉就是DP的思想,还有有一种从一张图跑到另一张图的feel。 后来

2016-09-20 22:17:14 674

原创 CodeForces 689B【最短路】

题意: 给你一副图,给出的点两两之间的距离是abs(pos1-pos2),然后给你n个数是表示该pos到x的距离是1. 思路: 直接建边,跑spfa就好了。虽然说似乎题意说边很多,其实只要建一下相邻的点的边就好了,这样的图的性质还是得到了;// d*##$.// zP"""""$e. $" $o//4$ '$

2016-09-20 22:11:04 409

原创 HDU5122【水】

题意: 有n个数,然后按照冒泡排序的手段,只能往后移,然后问你最小几轮可以实现1-n 思路: 后边有比他小的数的话就一定要到后面去 求一下有多少个 PS: 如果还可以往前移,那么我们可以求一个最大确定个数,然后除外的就一定要移。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=1

2016-09-20 09:20:29 329

原创 HDU5112【水】

#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e4+10;struct asd{ double time; double x;};asd d[N];int n;bool cmp(asd a,asd b){ return a.time<b.time;}i

2016-09-19 22:31:35 347

原创 HDU5119【dp背包求方案数】

题意: 有n个数,问有多少方案满足取几个数的异或值>=m; 思路: 背包思想,每次就是取或不取,然后输出>=m的方案就好了。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=2097150+10;LL dp[2][N];int a[50];int n,m;int main(){

2016-09-19 22:28:58 521

原创 HDU5113【DFS+剪枝】

题意: n*m的矩阵 k种颜色 每种颜色有c[i]个 上下左右相邻的格子不能一样的颜色 问你有没有一种染色方法,有的话输出方案。 思路: 暴搜啊,n,m都才5,做完以后大哥的剪枝是奇偶剪枝,其实画完图我就应该想到了。然后自己想了好多,关于奇偶剪枝,自己也就做了HDU1010而已吧。 然后自己的思路,一开始暴搜无剪枝T了,然后想到了最终两种颜色的时候一定是相等的,剩下的一半,然后还是T

2016-09-19 22:26:32 463

原创 51nod1010【二分】

打表+二分#include <bits/stdc++.h>using namespace std;typedef long long LL;const LL inf=1e18+100;LL a[20000];int num;void init(){ num=0; LL i,j,z; for(i=1;i<inf;i=i*2){ for(j=1;j*

2016-09-19 16:34:54 562

原创 51nod1242【矩阵快速幂】

基础题。。 wa在n的范围需要用long long = =、涨个记性#include<bits/stdc++.h>using namespace std;typedef long long LL;const LL mod=1e9+9;struct asd{ LL a[2][2];};asd mul(asd x,asd y){ asd ans; for(int i

2016-09-19 15:44:22 612

原创 hdu1158【DP】

题意:第一行项目数;第二行每个工人的Hire Salary Fire money第三行每个项目需要的人的数量;工人在hire/fire的时候要付出额外的钱,如果已经hire了还没有fire就一直会付salary求一个最小开支。思路:这题因为感觉就是DP,所以也没想贪心。。H:hire的钱S:salaryF:firep[]代表项目人数;首先可以看出:①

2016-09-18 23:33:12 669

转载 求N!的长度【数学】

转自:http://blog.csdn.net/fengdian29147001/article/details/11992755给一个数X,len=log10(X)+1就是X这个数的长度①:当N的值不超过10^6时那么N的阶乘长度=log10(1*2*3*4*……*N)+1=log10(1)+log10(2)+log10(3)+log10(4)+……+log10(N)+1

2016-09-18 11:01:29 470

原创 hdu5883【欧拉通路】

题意:n个点m条无向边的图,找一个欧拉通路/回路,下标是p1,p2,p3…pt,然后使得ap1XORap2XOR…XORapt这个值最大。 思路: 首先要判断一下这个图是不是联通的,用并查集就好了,然后有个注意点就是可能是单个独立点; 然后再判断是不是欧拉通路,不是也不行; 最后计算,最后如果是欧拉回路还要找一个最大起点(终点)。#include <bits/stdc++.h>using

2016-09-17 19:48:03 921

原创 UVA12504【C++STL运用】

雨巨的UVA的C++题集英文真长… 题意: 有两本字典,第一行是旧字典,第二行是新字典。 每行不超过100个字符,没有空格,两本字典都可以是空的; 新key:+ 缺key:- 值变 :* 思路: 具体见代码,具体参考http://blog.csdn.net/acvay/article/details/43021077 这里会出现一个count函数: algorithm头文件定义

2016-09-17 10:55:26 794

原创 UVALive 7327【模拟】

先从整体考虑,因为取膜适用于加法,所以一个数拆分成两个数%m==0就代表这个数%m一定=0; 再考虑把原串划分成两段,当且仅当某个前缀组成的数能被m整除时,原串才能被分成两段. 划成多段同理. 求出有多少地方能被切割,结果就是 2^(res-1). 就是相当于枚举每个位置切割or不切割结果.#include <iostream>#include <algorithm>#include <c

2016-09-16 22:46:31 370

原创 AtCoder Regular Contest 061 E - すぬけ君の地下鉄旅行【最短路】

具体题解又要搬大哥的了,嘿嘿~ 请点击:G点我 这道题目的难点就是同一家公司的路直接走不需要再花费,然后多了一个公司这个东西,这个不像是边的副权值(瞎说的)之类的东西,这是对于路来说的,路的属性。。。 其实稀里哗啦说了那么多,真的觉得这个方法实在是太棒了; 将点和公司组合构造新点,然后新点的路我们可以构造,根据题意,同一家公司的路不需要花费即(u,c)《=》(v,c)之间距离=0; 然后u

2016-09-16 22:24:56 1646

原创 HDU 1556【线段树区间更新】

这篇lazy讲的很棒: https://www.douban.com/note/273509745/ if(tree[rt].l == l && r == tree[rt].r) 这里就是用到Lazy思想的关键时刻 正如上面说提到的,这里首先更新该节点的sum[rt]值, 然后更新该节点具体每个数值应该加多少即add[rt]的值, 注意此时整个函数就运行完了,直接return,而不是还继续

2016-09-15 20:28:50 314

原创 POJ 3067【树状数组】

题意: 给你两行数字,n个m个,然后给你k条线直接把两个数连起来,问有多少个交叉的 思路: 假定上一行是起点,下一行是终点。 把路按照起点从大到下排序, 然后可以直接对每条路查询,这条路目前的交叉数,等于sum[终点-1]条路相连, 因为是起点是从大到小,终点是取一个前面点的路,所以肯定相交; 具体处理就是利用树状数组存终点,每次取值,复杂度也低; 然后这个K有问题…//#inclu

2016-09-15 20:25:04 346

原创 lightoj 1085【离散化+树状数组】

题意: 计算一个序列里有多少个上升子序列 思路: 先离散化一下,按照值排序,如果相同的就按照坐标从大到小排序,这样就可以避免重复计算。 树状数组存的是以a[i]结尾的子序列之和; dp[a[i]]=sigma(a[i]-1)+1; OK,还是很简单的;#include <bits/stdc++.h>using namespace std;typedef long long LL;c

2016-09-15 20:23:11 67

空空如也

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

TA关注的人

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