HDUOJ
Roxannekkk
这个作者很懒,什么都没留下…
展开
-
HDU2519新生晚会
题目链接核心即为利用排列组合公式求解即可;一开始直接写了一个简单的一个递归没有考虑到会不会溢出所以直接wa了;第二版想利用写一个大数的模板来计算,但我发现实现不了大数相除,所以我又白给了。。。第三回成功ac了代码如下:#pragma warning(disable:4996);#include <stdio.h>#include <algorithm>#i...原创 2019-09-23 16:38:14 · 147 阅读 · 0 评论 -
HDU1215--七夕节
题目链接本题是找每个数的因数之和,但由于所给数最大可能到500000,若只是按照字面,先循环找因子,在相加很有可能超时。这个方法行不通,所以我们利用打表的方法来做。大题思路:枚举范围内每个整数,然后再枚举范围内这个整数的所有的倍数,加上这个数,因为这个整数的倍数中一定含有这个整数因子,这样速度比枚举判断是否%==0快的多,如果用取余来判断会超时,另外同样的方法如果用cin,cout来输入输出一...原创 2019-09-16 13:35:15 · 102 阅读 · 0 评论 -
hdu 1031 Design T-Shirt
题目链接这道题的难度不大,核心思想是利用排序做,最大的难点可能是对于题目的理解,我在最开始做的时候,理解的为,先按序选出k个最大的,如果有相同的满意度,则序号大的在前;但是其实际意思是,先按序选出k个最大的,在对这k个按序号排序由大到小输出。。。注意每次判断时,要对结构体数组初始化,不然可能会累加上一次得值,导致排序错误;代码如下:// ConsoleApplication20.cpp :...原创 2019-09-15 20:08:46 · 124 阅读 · 0 评论 -
hdu2503 a/b + c/d
题目链接本题题目要求分数相加并进行最简化;核心思想:运用最小公倍数即可,直接让分数的分子分别乘另一个分母再相加,比上分母相乘,在进行约分即可,不必先求出分母最小公倍数,在分子做对应乘法,最后再与分母相约分;利用最大公倍数约减;#pragma warning(disable:4996);#include <iostream>#include<stdio.h>#in...原创 2019-09-15 16:58:30 · 130 阅读 · 0 评论 -
hdu1236 排名
题目链接题目不难,注意scanf不吸收回车,所以每次录入的时候需要把上一行的回车去掉(可用getchar());再者就是对排序的定义,分数不相等时以分数为升序,相等时以序号为降序。代码如下:#include<stdio.h>#include<iostream>#include<vector>#include<string.h>#incl...原创 2019-09-03 21:12:07 · 119 阅读 · 0 评论 -
HDU 1098 Ignatius's puzzle
题目链接题目大意是f(x)=5x ^13+13x ^5+kax,输入一个k,能都找到一个a使得对任意的x都满足fx被65整除。推导:由题可知,对任意的x都满足;不妨我们假设x=1,所以fx=18+ka;看怎么去值使得fx%65=0;遍历a=1~65看能否满足前式即可;因为(18+ka)%65=(18%65+ka%65)%65;ka%65=(k%65a%65)%65;当a=66时,(k...原创 2019-09-03 15:21:10 · 97 阅读 · 0 评论 -
hdu 1716排列2
拿到这道题,我的想法是,利用dfs来做,可在解决输出同样的数这个问题时,遇到了麻烦,难以解决;且在格式的处理上也遇到了麻烦:代码如下:#include<stdio.h>#include<iostream>#include<vector>#include<string.h>#include<string>#include<...原创 2019-09-03 14:30:16 · 508 阅读 · 0 评论 -
hdu1241Oil Deposits
题目链接题目大意是求@直接相邻或者间接相邻(斜对角)所形成的区块数;解题思路是利用bfs/dfs来找出所形成的区块数。dfs算法:(一次走到底)#include <iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;ch...原创 2019-09-02 20:24:19 · 84 阅读 · 0 评论 -
hdu2094产生冠军
题目链接这道题的核心思想是拓扑排序,将选手抽象为节点,将胜负关系抽象为有向边,则产生冠军的情况即为全图中入度为0的节点唯一;代码如下:利用map来将选手名字映射到节点号;#include<stdio.h>#include<iostream>#include<vector>#include<string.h>#include<st...原创 2019-09-02 10:44:12 · 226 阅读 · 0 评论 -
hdu oj 1201:18岁生日
题目链接题意是求每个人18岁生日所经历的天数,一开始没明白如果这个人没有18岁生日,就输出-1,是什么意思,以为是要考虑现在的日子,看他到没到十八。但后来查了一下了解到意思是如果她的生日是闰年的二月29,则十八年必定过不了生日;可以利用求余的加法推导,确实是如此==>(a+b)%c=(a%c+b%c)%c我的做法是利用一个三维数组,假设一个年份,对这个之前的进行预处理,存下到0.1....原创 2019-09-16 16:36:30 · 133 阅读 · 0 评论 -
hdu1250Hat's Fibonacci
题目链接这道题的核心还是利用,大数+题目的fibonacci来做代码如下:#pragma warning(disable:4996);#include <iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<queue>using ...原创 2019-09-16 19:20:57 · 152 阅读 · 0 评论 -
hdu 1087
题目链接根据题意和所给数据,大概能推测出是最长递增子序列,并计算其和的题;代码如下:dp[i]是以num[i]为元素结尾的最大子序列和;#pragma warning(disable:4996);#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <string...原创 2019-09-22 21:02:39 · 123 阅读 · 0 评论 -
HDU1850 Being a Good Boy in Spring Festivaly
题目链接题目的核心思想是利用nim博弈来解决;题意:有m堆牌,两个人先后取某堆中的任意(不少于一)张牌,最后取完者胜;问先手取胜第一次取牌有多少种取法。题意:有m堆牌,两个人先后取某堆中的任意(不少于一)张牌,最后取完者胜;问先手取胜第一次取牌有多少种取法。思路:1)如若给出 的是必败状态:a1^a2 ^…an=0,则先手不会有任何可能获得胜利;(必定后者胜);2)若给出的是必胜状态:a...原创 2019-09-22 16:23:44 · 95 阅读 · 0 评论 -
hdu2149
题目链接题目核心思想是利用博弈论中的巴什博弈来解决问题;分为三种情况讨论:若 m%(n+1)==0 则无论如何都买不下。若 m>n 则出价 m%(n+1) 可以买下其他情况:就是成交价小于最高出价。那就是从m到n都可以买下来但我第一次wa了,检查后发现我的逻辑语句不对有重叠的;m%(n+1)!=0是包括n》m的情况的代码如下:#pragma warning(disabl...原创 2019-09-21 21:52:17 · 98 阅读 · 0 评论 -
hdu1131
题目链接一开始我光看题目,只想到了n个节点构造二叉树的公式,发现并不对,查了一下资料,实际上是,我之前用的公式是以一个固定的点为根构建 的种数,而此时,我们需要求每一个点都可以为根的情况,所以再乘n!(没想明白?)代码如下:#pragma warning(disable:4996);#include <iostream>#include<stdio.h>#inc...原创 2019-09-20 20:12:43 · 67 阅读 · 0 评论 -
HDU1048 The Hardest Problem Ever
题目链接题目不难;代码如下:#include <stdio.h>#include <string.h>#include <ctype.h> char str[220]; int main(){ while(gets(str)){//读到换行符前,并将换行符从缓冲区去掉 if(!strcmp(str, "ENDOFINP...原创 2019-09-20 15:55:17 · 159 阅读 · 0 评论 -
【HDU】2086 - A1 = ?
题目链接我一开始时的想法是通过解多元一次方程组来求解a1,但我天真的以为只要把方程输进去然后递归就可以了。。。直到考虑是顺序还是逆序,的时候发现不对。后面查了一下,发现需要进行推导,找到函数的递推关系在做;代码如下:/* 因为:Ai=(Ai-1+Ai+1)/2 - Ci, A1=(A0 +A2 )/2 - C1; A2=(A1 + A3)/2 - ...原创 2019-09-17 22:47:05 · 110 阅读 · 0 评论 -
hdu1020Encoding
题目链接题目不难,核心在于理解题意,不是统计字符串中出现的所有字符的个数,而是统计相邻的个数;wa代码:#pragma warning(disable:4996);#include <iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<q...原创 2019-09-17 21:06:21 · 170 阅读 · 0 评论 -
HDU-1228-A+B
题目链接此题考察对字符串的处理;刚做的时候毫无头绪,查阅了一些大神的博客,明白了也掌握了关于scanf对字符串的用法;#include<cstdio>#include<cstring>char a[10][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", ...原创 2019-09-16 19:54:34 · 139 阅读 · 0 评论 -
hdu1023Train Problem II
题目链接这道题的大意是求那辆火车出站的方法,可以抽象为n个元素出栈的序列数,运用了卡特兰数的知识,(补充:卡特兰数的运用非常广泛,在凸多边形三角划分,出栈次序,n个节点的二叉树有多少种构型等均可由此来计算)卡特兰数的计算公式有很多,这里我们运用其中的递推式来解决这个问题即h(n)=h(n-1) * (4 * n-2)/(n+1) ;因为此题数字量非常大,所以int,long long均是不够...原创 2019-09-01 19:36:16 · 115 阅读 · 0 评论 -
hdu2647 Reward
题目链接题目大意是,根据题目条件得到一个拓扑排序来进行发工资,且要使发的工资最少(比前一个多1即可);核心思想还是利用拓扑排序来完成。但有几个难点导致了多次的wa1.首先要利用所给条件,来进行判断,选择哪个来做弧头弧尾,这里我们采用的思路是:给出的关系是a要求的工资要比b的工资多,由于尽可能的让老板少付钱,那么a的工资就是b的工资+1,可以确定关系为a>b,根据拓扑排序建边的原则是把“...原创 2019-08-30 10:19:46 · 79 阅读 · 0 评论 -
hdu 1060Leftmost Digit
题目链接此题刚开始做的时候,想用类似处理大数的n的阶乘的方法,构造一个结构体,手动来进行推导,来输出第一位,但我发现我还是太年轻了hhh。数据大的爆炸,而且放大数组长度or数组元素的所存大小均不可行,无非达不到所求位数,或者超时两种结果;#include <iostream>#include<algorithm>using namespace std;struct...原创 2019-08-28 22:01:36 · 120 阅读 · 0 评论 -
hdu1003Maxsum(最大子列和问题)
题目链接这道题目标是解决最大连续子序列和的问题,属于动态规划中的经典问题,但又有所变形增加了要求:即求解出最大连续子列和的开始首项和末项的位置。但其核心思想没有变化,仍然沿用dp[i]=max{a[i],dp[i-1]+a[i]}这一状态转移方程,其中dp[i]是以第i个元素结尾的最大连续子序列和,a[i]为第i个元素的大小。这是我第一次wa的代码// ConsoleAppl...原创 2019-08-10 14:30:52 · 202 阅读 · 0 评论 -
杭电OJ 2734. Quicksum
查了一些资料,用scanf来实现这个问题。#include<stdio.h>#include<string.h>int main(){ char a[255]; while (scanf("%[^\n]%*c", a)!= EOF)////读到'\n'结束读取,并将其读到的数据抛弃,然后再抛弃一个字符(这个字符是'\n') { if (a[0]== ...原创 2019-08-04 20:51:32 · 349 阅读 · 0 评论 -
杭电oj2021
原题链接感觉像是一个简单的贪心,每次从最大的币值中选,这样就能保证所需要的总张数最少。#include "stdafx.h"#include<stdio.h>int main(){ int a[6] = { 100,50,10,5,2,1 }; int n; while (scanf("%d",&n)!=EOF) { if (n == 0) brea...原创 2019-08-05 19:54:13 · 312 阅读 · 0 评论 -
杭电oj2030
题目链接他给的提示是根据汉字机内码的特性来编码,所以去查了一下。得知:char类型的一个元素占一个字节。汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。计算机中, 补码第一位是符号位, 1 表示为 负数,所以汉字机内码的每个字节表示的十进制数都是负数,统计输入字符串含有几个汉字,只只需求出字符串中小于0的字符有几个,将它除以2就得到答案。代码如下://...原创 2019-08-05 22:07:53 · 557 阅读 · 0 评论 -
杭电oj2027
题目链接没有什么特别大的难度,主要是注意格式的输出。最后一段不用加空行。代码如下:#include<stdio.h>#include<string>int main(){ int n; while (scanf("%d", &n) != EOF) { getchar(); while (n) { char str[1...原创 2019-08-05 22:45:48 · 117 阅读 · 0 评论 -
杭电oj2028
题目链接大体思路1.运用最小公倍数等于两个数的乘积,再除与它们的最大公因数;2.多个的最小公倍数可以利用两个求完得到的,在与另一个再求,反复调用即可;3.要注意溢出的问题即1的公式先除在乘保证不会溢出;代码如下:#include "stdafx.h"#include<stdio.h>int gcd(int x, int y) { if (y == 0)...原创 2019-08-05 23:05:14 · 195 阅读 · 0 评论 -
hoj 2504 又见GCD
题目链接我在做这道题时,没有想到用枚举;我的思路是分情况讨论1.如果a=b,(因为题目中只说了b不等于c,所以我考虑到了a=b的情况),取c=2*a即可;2.如果a和b不相等,并且a/b=2,那么可取c=3*b;3.如果a和b不相等,并且a/b与2的最大公因数为1(如果不为1,则肯定c不为最大公因数),取c=2*b;4.如果a和b不相等,并且a/b与2的最大公因数不为1(如果不...原创 2019-08-08 21:41:32 · 115 阅读 · 0 评论 -
hdu2034人见人爱A-B
题目链接这道题难度不大。但做完这个,有很多收获,首先还是要认真检查代码,一些变量的使用不要出错。其次就是要注意,break 和continue的区别,一个是结束本次循环,开启下个循环,而另一个是直接结束循环,用的时候要考虑清楚该用什么,盲目的用,会导致都不知道错哪!最后,写代码要仔细认真!!!(重要的话要多说)代码如下:#include<stdio.h>#include<...原创 2019-08-18 19:06:31 · 203 阅读 · 0 评论 -
hdu2048
题目链接此题的思路是类似错排和排列组合同时使用的形式。我们需要知道总共的可能的组合数是多少,为n!个。再利用错排的思路得出出错的组合数即可。错排的思路可以借鉴hdu2049的想法:首先考虑,如果开始有n-1个新郎,并且这n-1个人都已经完成了错排(有f(n-1)种可能),现在又来了一个人,那么后来的第n个人可以通过用自己的新娘去和那n-1个人中的任意一个交换,来实现n个人都错排。这种情况有...原创 2019-08-20 16:09:20 · 115 阅读 · 0 评论 -
hdoj 1715 大菲波数
一开始以为简单的通过递推就可以了,但后面发现wa了,查了一下,也才注意到题目很明显的说了大数,所以什么类型都不够用,位数很大。查了一下,了解到可以用二维数组做,即第一维是控制算到第几个的,第二维用来控制所得数的位数,类似于用手动的方法来计算数列;代码如下:#include <stdio.h>#include <string.h>int a[1005][1005];...原创 2019-08-24 19:25:49 · 238 阅读 · 0 评论 -
hdu1875 畅通工程再续
题目链接此题是求最小生成树的变形,需要从点和坐标中抽象出边的信息,再利用kruskal求得最小生成树,不过要注意边是否符合要求,不然无法使用。看最后能否构成最小生成树;**#include <iostream>#include<stdio.h>#include<cmath>#include<algorithm>using namespac...原创 2019-08-28 10:59:52 · 135 阅读 · 0 评论 -
hdu1863 畅通工程
题目链接本题和还是畅通工程思路非常类似。区别在于后者给的图的边数为n*(n-1)/2,是一个无向完全图,一定能找到一个最小生成树。而前者给的边数不定,所以不一定能生成一个最小生成树,需要判断。所用知识点:kruskal算法(最小生成树) 并查集代码如下:#include <iostream>#include<stdio.h>#include<algori...原创 2019-08-28 10:29:59 · 105 阅读 · 0 评论 -
HDU 1272 小希的迷宫
题目链接本题核心考点还是并查集的应用,不过还要注意一些细节;1.判断有无回路(生成了环),可以通过每次合并时,判断两个节点的根是否相同即可得知;2.产生并查集时,不能利用递归写,因为数据量大,会爆栈;3.直接输入 0 0也是一种可能,是对的,要输入yes4.写的时候不能直接拿所有节点来做,要根据他所输入的节点,作为我们所得到图中的节点,所以要预先设置一个标志位用于记录本次case中,用到...原创 2019-08-27 16:28:50 · 88 阅读 · 0 评论 -
hoj1856 More is better
题目链接大体思想是利用并查集,来求解连通分量个数,并另外再用一个数组sum来记录所包含元素个数,初始为1,再合并时,将被合并的这个sum加到另一个上,最后利用循环找到所包含元素最大的,在进行输出。注意运用printf提高处理速度,用cout会超时(这也体现了printf处理大量数据的优越性);代码如下:#include <iostream>#include<stdio.h...原创 2019-08-27 10:28:06 · 99 阅读 · 0 评论 -
hdu1212Big Number
题目链接题目大意是求一个数串长度的取余,经查验利用同余定理来完成即可。(a+b)%c=(a%c+b%c)%c=(a+b%c)%c; (ab)%c=(a%cb%c)%c;之前看到别的博主写的核心部分的代码是这样的ans = (ans * 10 + (str[i] - ‘0’) % m) %m;可能是我有点菜没想明白hhh,所以我根据定理来写的代码,并可以成功ac。关键步骤如下a...原创 2019-08-18 14:32:03 · 109 阅读 · 0 评论 -
hdu2160母猪的故事
题目链接此题所用方法仍是递推;假设第n年猪的总数为fn,由题可知第n年猪的总数的构成为以下情况:第n-1年遗留的+第n-1年和第n-2年所生的还要减去第n-2死去的数量。而其中第n-2年所生的还要减去第n-2死去的数量相等,因为有多少(ˉ(∞)ˉ)才能生多少,所以第n-1年遗留的+第n-1年和第n-2年所生的还要减去第n-2死去的数量 相约去,而n-1年所生的量,即为n-2年有的量,因为...原创 2019-08-22 16:43:36 · 187 阅读 · 0 评论 -
hoj1231最大连续子序列
题目链接这道题属于经典的动态规划,核心思想即为dp[i] = max(a[i],dp[i-1]+a[i])。这道题给了我最大的收获就是要仔细读题,要么少看要求,要么看串要求。。。-.-代码如下#include<algorithm>#include <stdio.h>using namespace std;int a[10000], dp[10000]...原创 2019-08-17 16:12:51 · 95 阅读 · 0 评论 -
HDU 2095 Find your present (2)
题目链接在拿到这道题的时候,想定义一个二维数组,第一维存数,第二维存出现的次数就完事了。结果发现,数据量非常大-.-,铁定超时。有没有接触过那些好用的模板库QAQ,思考了好久,还是没想出来,后来查阅了很多博主的博客,发现了个非常巧妙的做法,就是运用位异或下面列出我们做题需要的性质1、0^n = n。2、n^n = 0。而由题可得,我们需要的是为奇数的式子,(偶数的会被约去)所以我们只需将...原创 2019-08-20 20:57:30 · 135 阅读 · 0 评论