
HDU
文章平均质量分 71
BEconfidence
坚持才是胜利之道
展开
-
1001 Sum Problem
#include#includeusing namespace std;int main(){ long long a; while(cin>> a){ if(a%2 == 0) cout << a/2 * (a+1) << "\n\n"; else cout << (a+1)/2 *a << "\n\n"; } return原创 2015-02-16 01:05:56 · 419 阅读 · 0 评论 -
HDU4255 A Famous Grid
#include#include#include#include#define N 40400#define MAX 210#define CNT 4400using namespace std;bool isprime[N];int prime[CNT],cnt;int map[MAX][MAX];bool visited[MAX][MAX];struct point {原创 2015-04-18 15:40:40 · 619 阅读 · 0 评论 -
HDU1035 Robot Motion
很水的模拟题,把-号写成了=号,找了一个小时我也是醉了,但发现自己比原来还是进步了#include#include#includeusing namespace std;const int maxn = 100;char map[maxn][maxn];int vis[maxn][maxn];int main(){ int m,n,x; while(scanf(原创 2015-04-20 20:24:20 · 704 阅读 · 2 评论 -
HDU4245 A Famous Music Composer
#include#includeint main(){ int kase = 0; char s[50],ss[50]; while(1 ){ if( scanf("%s",s) ==EOF ) break; scanf("%s",ss); printf("Case %d: ",++kase); if原创 2015-04-17 22:21:56 · 585 阅读 · 0 评论 -
HDU 4254 A Famous Game
J - 1010Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uSubmit Status Practice HDU 4254DescriptionMr. B and Mr. M like to play with balls. They have m原创 2015-04-17 22:10:07 · 935 阅读 · 0 评论 -
HDU4247 A Famous ICPC Team
#include#include#include#includeusing namespace std;int main(){ long long int a[5]; int c=0; while(scanf("%lld%lld%lld%lld",&a[0],&a[1],&a[2],&a[3])!=EOF) { sort(a,a+4);原创 2015-04-17 22:20:55 · 643 阅读 · 0 评论 -
HUD4256 The Famous Clock
int main(){ int kase = 0; char s[50]; while( scanf("%s",s)!=EOF ){ printf("Case %d: ",++kase); if( !strcmp(s,"I") ) printf("1\n"); if( !strcmp(s,"II") ) print原创 2015-04-17 22:24:10 · 419 阅读 · 0 评论 -
HDU4252 A Famous City
H - 1008Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uSubmit Status Practice HDU 4252DescriptionAfter Mr. B arrived in Warsaw, he was shocked by the原创 2015-04-17 22:13:24 · 844 阅读 · 0 评论 -
HDU 1576 A/B (扩展欧几里德算法)
连接:http://acm.hdu.edu.cn/showproblem.php?pid=1576Sample Input21000 5387 123456789 Sample Output79226060题意:要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) =原创 2015-04-25 22:52:49 · 638 阅读 · 0 评论 -
2014上海全国邀请赛——题目重现 4.24
连接:http://acm.hdu.edu.cn/search.php?field=problem&key=2014%C9%CF%BA%A3%C8%AB%B9%FA%D1%FB%C7%EB%C8%FC%A1%AA%A1%AA%CC%E2%C4%BF%D6%D8%CF%D6%A3%A8%B8%D0%D0%BB%C9%CF%BA%A3%B4%F3%D1%A7%CC%E1%B9%A9%CC%E2%C4%原创 2015-04-25 23:23:21 · 721 阅读 · 0 评论 -
HDU 5094 Maze
题目意思:说有一个人在(1,1) 他的目标点在(n,m) 每次是4方向的移动; 限制条件:有的各自之间有墙 或者门,强不可通过,有对应的要钥匙可以开启这个类型的所有门; 问题:求最少步骤数(和); 解:很明显的搜索 只要建图弄得好就非常好写#include#include#include#include#includeusing names原创 2015-05-03 21:00:47 · 474 阅读 · 0 评论 -
HDU5092 Seam Carving(2014上海全国邀请赛——题目重现)(DP)
题意:给你一个n*m的矩阵,每一行取出一个数,使得这些数和最小,且相邻两行的数所在的列的差的绝对值不能超过1。如果不止一种取法,输出列序号最大的。分析:数塔DP= =。。多了一个数组来记录每一个节点的后继。。。因为要从上往下输出,所以我们从下往上递推,这样可以避免递归输出路径。。。注意要优先选取靠右的列。。。#include#include#include#include#原创 2015-05-03 20:01:42 · 870 阅读 · 0 评论 -
HDU5093 Battle ships (二分图)
题意:给你一个m*n(1船不能放在冰山上;船不能放到浮冰上两艘船之间除非中间有冰山,否则不能在同一列或同一行。分析:红果果的二分最大匹配。。。。图也很容易构造。。。把每一行被冰山分隔开来的海洋格子连通块(至少一个格子)作为X点,同样的每一列被冰山分隔开来的海洋格子连通块作为Y点,X点与Y点有边相连当且仅当这两个连通块共用一个海洋格子。然后跑二分最大匹配。。。2500个点原创 2015-05-03 21:52:25 · 563 阅读 · 0 评论 -
HDU5224 Tom and paper(BestCoder Round #40)
Tom and paper Accepts: 464 Submissions: 955 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)问题描述Tom面前有一张纸,它的长和宽都是整数。Tom知道这张纸的面积n,他想知道这张纸的周长原创 2015-05-09 22:10:17 · 788 阅读 · 0 评论 -
hdu5225 Tom and permutation(BestCoder Round #40)
Tom and permutation Accepts: 120 Submissions: 422 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)问题描述Tom学会了通过写程序求出一个1-n的排列的逆序对数,但他的老师给了他一个原创 2015-05-09 21:22:58 · 856 阅读 · 0 评论 -
HDU5226 Tom and matrix(BestCoder Round #40)(lucas定理)
Tom and matrix Accepts: 29 Submissions: 225 Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)问题描述Tom放学回家的路上,看到天空中出现一个矩阵。Tom发现,如果矩阵的行、列从0开始标号原创 2015-05-09 21:49:16 · 877 阅读 · 0 评论 -
HDU5098 Smart Software Installer (top排序)
题目意思:有一批软件需要安装,“:”前的软件需要在“:”后的软件安装完成后才能安装(“:”后面可能有多个软件),“*”表明该软件需要重启才完成安装。求所有软件都完成安装最少重启的次数。解题思路:双队列top排序,用两个队列q1,q2分别来存不需要重启的软件和需要重启的软件。首先将入度的0的点加进队列,当然不需要重启的进q1,需要重启的进q2。然后删除q1中的所有节点,让与他原创 2015-05-04 16:57:31 · 761 阅读 · 0 评论 -
HDU5091 Beam Cannon(线段树扫描线)
#include#include#include#includeusing namespace std;const int maxn=40005;const int bw=20000;#define lson(x) ((x)<<1)#define rson(x) (((x)<<1)|1)int lc[maxn<<2],rc[maxn<<2],ad[maxn<<2],nd[ma原创 2015-05-04 16:21:14 · 1019 阅读 · 0 评论 -
HDU 3951 Coin Game (博弈)
又是一道博大精深的博弈题目。已经说了 巴什博弈,威佐夫博弈,尼姆博弈,SG函数,找规律的博弈,这次和找规律有点类似——对称博弈。一般都是圆啊方啊什么的。对于这道题而言,可以有三种情况:①k等于1 一次最多只能拿1个(每堆只有一个),那就是看奇偶了。②n≤k 这种情况,那肯定先拿的赢。③ 这条就是对称博弈了, 除了上述两种情况外的情原创 2015-05-06 20:42:02 · 688 阅读 · 0 评论 -
HDUBoard Game Dice (数学期望)
推出的公式是M^x*x/N,大概意思是M^x*x这些种可能后一定会找出一个裁判,在除以N为数学期望。可能和数学公式还有关系。#include#include__int64 gcd(__int64 a,__int64 b){ return b == 0 ? a : gcd(b, a%b);}int main(){ __int64 i,j,n,m,t,x,a,b,te原创 2015-05-06 20:27:16 · 661 阅读 · 0 评论 -
HDU3953 I'll play a trick on you
分析上图中的数字,很容易误以为样例就是求A,B之差的,但是发现图中的最后一个数字是“7”,不符合这一规律的,再对图进行观察,可以发现,如下规律:99 72 “=>” 9+9=18 ,7+2=9 18+9=27;45 27 “=>” 4+5=9, 2+7=9 9+9=18;39 18 “=>” 3+9=12, 1+8=9, 12+9=21;36 21 “=>” 3+6=9, 2+1原创 2015-05-06 20:56:14 · 766 阅读 · 0 评论 -
HDU1671 Phone List (字典树)
题目大意: 输入多串数字串,要求判断是否有的数字串是其它串的前缀。如果存在输出NO,否则输出YES。解题思路: 用trie建立字典树,然后在每个数字串的结尾处标志1,之后每输入一个串,就判断一下。是否有之前的标志记号。#include#include#include#includeusing names原创 2015-05-06 21:11:53 · 647 阅读 · 0 评论 -
HDU3952 Fruit Ninja (几何)
这题是让你求一条线能够穿过最多的水果(碰到一个点也算)。可以证明,枚举两个点组成的线是可行的。因为假设有一条线穿过N个水果,那么把它平移一些使得还是穿过N个但是已经不能再平移了,这样的话,这条线肯定是在某个水果的某个端点上。再以这个端点,旋转这条线,还是穿过N个,直到不能旋转为止(再旋转可能就不能穿过N个了),这样的话,肯定还是这条线碰到了另外一个端点。所以只要枚举原创 2015-05-08 12:49:46 · 727 阅读 · 0 评论 -
HDU1875 还是畅通工程
与之前的畅通工程类似,求最小生成树,只是要剔除不符合条件的边,还要判断是否是连通图(这个磨蹭了很长时间,只要判断加入集合的点数与题目给出的点数是否相等即可)。#include#include#include#includeusing namespace std;#define NUM 103struct point{ int x; int y;}pos[NUM]原创 2015-05-27 14:25:16 · 711 阅读 · 0 评论 -
hdu1325 Is It A Tree?(并查集)
根据树的特点:要注意的问题就是:0 0 是棵树用结构体,分别记录标记、入度和根然后就分别判断:不要产生环的情况不要入度大于1的情况不要多根的情况#includeconst int max_num = 100000 + 10;typedef struct { int num,root,conn;}Node;Node node[max_num];void原创 2015-05-27 12:59:35 · 639 阅读 · 0 评论 -
HDU1856 More is better(并查集)
和基本的并查集相比,就是稍微改动了一下。要求的是每个集合里面人数最多的人数。就多用一个数组记录这个人数即可。#include#define N 10000000int father[N],num[N];void initial(){ int i; for(i=1;i<=N;i++) { father[i]=i; num[i原创 2015-05-27 13:29:37 · 641 阅读 · 0 评论 -
最小生成树prim算法实现
今天从志权师兄那里学会了最小生成树。所谓生成树,就是n个点之间连成n-1条边的图形。而最小生成树,就是权值(两点间直线的值)之和的最小值。 首先,要用二维数组记录点和权值。如上图所示无向图:int map[7][7]; map[1][2]=map[2][1]=4; map[1][3]=map[3][1]=2;原创 2015-05-27 13:47:48 · 818 阅读 · 0 评论 -
HDU1897 继续畅通工程(最小生成树Prim)
题目分析:这个题和hdu 1233差不多,就是加了一个状态,因此我们可以先判断每条路的状态,如果是修好的,就让它们的成本是0;如果没修,就让成本给出的成本。这样问题的处理就和1233一样了。#include#include#includeusing namespace std;#define inf 0x3f3f3f3fint map[100][100];int s[100],vi原创 2015-05-27 16:47:19 · 721 阅读 · 0 评论 -
hdu1498最小点覆盖
1.题意:(很是重要,理解了题意才能有转换为最小点覆盖的思路),对于一个n*n的矩阵,里面有一些颜色不同的气球(用1~50标记种类),给你K次机会,每次机会可以把某一行或者某一列中的某一种颜色全部消灭,问你K次消灭之后,有哪些颜色是你不能消灭完的....拿题目的案例 2 来画图:我们这里只有K=1次机会去消除,,我们只有四种方式,从图中来看,1次机会我们不可能把1号颜色全部消除原创 2015-06-17 17:06:25 · 949 阅读 · 0 评论 -
HDU1102 Constructing Roads (最小生成树)
Prim算法求最小生成树#include#include#includeusing namespace std;const int N=110;const int INF=0x3f3f3f3f;int n,ans;int map[N][N],dis[N],vis[N];void Prim(){ int i; for(i=1;i<=n;i++){原创 2015-05-27 13:49:32 · 865 阅读 · 0 评论 -
HDU1233 还是畅通工程(并查集)
思路:考虑的是并查集,还有贪心算法中的克鲁斯卡尔算法,考虑的时候要借助 贪心算法还有并查集,建立树的概念,通过寻找父节点,看是否是满足的父节点,然后进行一些列的判断求解。#include#includeusing namespace std;struct dis{ int a,b,c;}s[10010];int cmp(dis x,dis y){ return原创 2015-05-27 14:03:26 · 924 阅读 · 0 评论 -
HDU 1151 Air Raid(最小路径覆盖)
二分图匹配(匈牙利算法的DFS实现)初始化:g[][]两边顶点的划分情况建立g[i][j]表示i->j的有向边就可以了,是左边向右边的匹配g没有边相连则初始化为0uN是匹配左边的顶点数,vN是匹配右边的顶点数调用:res=hungary();输出最大匹配数优点:适用于稠密图,DFS找增广路,实现简洁易于理解时间复杂度:O(VE)*******************原创 2015-06-16 20:56:12 · 787 阅读 · 0 评论 -
HDU 1507 Uncle Tom's Inherited Land*(二分匹配,输出任意一组解)
要输出任意一组解。一开始时两边都是n*m-k个点做的,答案输出一半,但是错掉了,匹配数没有问题,就是输出解会出错。后来按照奇偶分成两部分就可以了#include#include#include#include#includeusing namespace std;const int MAXN=510;int uN,vN;int g[MAXN][MAXN];int link原创 2015-06-17 17:39:25 · 727 阅读 · 0 评论 -
hdu 1281 棋盘游戏
将行和列的标号组成X和Y集合,然后如果x,y坐标可以放车,就在x和y点之间连一条线,不同行和列车就不会相互攻击,所以求出最大匹配就是所得的最多可放车额个数然后枚举每个点,判断其是否为重要点#include#include#includeusing namespace std;#define N 102int map[N][N],visit[N],match[N];int n,m,原创 2015-06-16 20:54:46 · 634 阅读 · 0 评论 -
hdu1150 Machine Schedule
有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。二分图的最小顶点覆盖数=最大匹配数本题原创 2015-06-16 20:32:48 · 774 阅读 · 0 评论 -
hdu1829 A Bug's Life
#include #include #include #include #include using namespace std;const int MAX = 2000;int pre[2*MAX+5];bool mark;void init(int n){int i;////(author:优快云:凌风)原创 2015-05-28 22:10:26 · 710 阅读 · 0 评论 -
hdu 1528 Card Game Cheater (最小覆盖)
#include"stdio.h"#include"string.h"#define N 52int map[N][N],v[N],link[N];int A[N],B[N],t,n;int dfs(int k){ int i; for(i=1;i<=n;i++) { if(map[k][i]&&!v[i]) {原创 2015-06-17 17:21:08 · 1056 阅读 · 0 评论 -
hdu1856 Brave Game(博弈论)
应该是最基础的那种博弈论的题(m+1)+多余 == n如果没有多余,那么就后手赢了#includeint main(){ int n; scanf("%d",&n); while(n--){ int x,p; scanf("%d%d",&x,&p); if(x%(p+1)==0 ) printf("secon原创 2015-05-31 21:47:25 · 573 阅读 · 0 评论 -
hdu1847 Good Luck in CET-4 Everybody!(博弈论)
仔细想这个和前面那个一样让对方面对一个数值(包括倍数)时,对面就是输了因为:对面拿一个数,但是拿不了这个数值 我拿完后补全这个数值对面那sb还是面对这个值这个题的数值是3#includeint main(){ int n; while(~scanf("%d",&n)){ if(n%3) printf("Kiki\n原创 2015-05-31 22:10:09 · 594 阅读 · 0 评论 -
hdu2199 (高精度二分)
二分的高精度模板二分法的精度使用方法#include#define F(x) 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6int main(){ int t; scanf("%d",&t); while(t--){ double y,l=0,r=100,mid; scanf("%lf",&y); i原创 2015-05-31 00:13:16 · 1120 阅读 · 0 评论