HDU
stdwal
天演在化,功成在学。知海无涯,见花问道。
展开
-
HDUOJ1042-N!
大数阶乘问题 #include #include using namespace std; const int MAXN = 40001; int a[MAXN] = {0}; void BigFactorial(int m) { int i, j; int carry; int temp; a[MAXN - 1] = 1; for (原创 2016-03-23 22:02:25 · 322 阅读 · 0 评论 -
2016 ACM/ICPC Asia Regional Qingdao Online 青岛区域赛部分题解
1001-I Count Two Three预处理所有型如2^a 3^b 5^c 7^d的数字即可,在1e9的数据范围内共有5194个,且1e9正好为最后一个2^a 3^b 5^c 7^d数,排序后二分查找即可。#include <cstdio> #include <cmath> #include <algorithm>using namespace std;const int inf = 1e9;原创 2016-09-18 19:40:43 · 1013 阅读 · 0 评论 -
POJ1273&&HDU1532-Drainage Ditches
最大流入门题,不用想就知道用Dinic算法。 0ms稳!#include <cstdio> #include <cstring> #include <vector> #include <queue>using namespace std;const int maxn = 200 + 10; const int INF = 10000000 + 10;struct edge { int to原创 2016-10-09 20:25:03 · 338 阅读 · 0 评论 -
HDU5900-QSC and Master
区间dp,状态转移就是枚举中间点k或者取两边,其中取两边需要中间能取干净才能取。#include <cstdio> #include <cstring> #include <algorithm>const int maxn = 300 + 10;struct pair { int key, val; };pair a[maxn]; long long sum[maxn];long long原创 2016-09-21 13:13:22 · 459 阅读 · 0 评论 -
HDU1251-统计难题
简单的Trie树即可解决。#include <cstdio> #include <cstring>char s[15];struct Trie { int cnt; Trie *next[26]; };void init(Trie *rt) { rt->cnt = 0; for (int i = 0; i < 26; i++) { rt->next[i原创 2016-09-08 20:35:19 · 288 阅读 · 0 评论 -
LA3971&&HDU2333&&POJ3497-Assemble
二分加贪心求最小值最大。 以下代码UVa用时49ms,HDU390ms,但在POJ就TLE了。 而且这个题实在让人费解,主要有两个疑惑: 1.使用lower_bound超时,遍历整个却不超时了。 2.mid用(lb + ub) / 2就会wa,必须要用mid = lb + (ub - lb + 1) / 2; 实在是难以理解…. 我真是太菜了….更新: 疑惑1:不能用lower_bou原创 2016-09-26 20:15:06 · 351 阅读 · 0 评论 -
HDU5904-LCIS
小小的瞎dp一下。 不过题目要求数据范围1e6,但是开1e6的数组会爆栈导致TLE,开1e5的数组就能过,数据太水而且题目没有出好,差评!#include <cstdio> #include <cstring> #include <algorithm>using namespace std;const int maxn = 100000+5;int a[maxn]; int b[maxn];int原创 2016-09-26 21:10:18 · 407 阅读 · 0 评论 -
HDU5912-Fraction
模拟题,自下而上模拟分子和分母。#include <cstdio>int a[10]; int b[10];int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }int main(int argc, char const *argv[]) { int T; scanf("%d", &T); for (int t原创 2016-10-26 19:56:39 · 461 阅读 · 0 评论 -
HDU5918-Sequence I
搏一搏,单车变摩托! 虽然是KMP但是可以暴力水过。#include <cstdio> #include <cstring>const int maxn = 1000000 + 5; const int maxm = 1000000 + 5;int a[maxn]; int b[maxm];int main(int argc, char const *argv[]) { int T;原创 2016-10-28 17:20:35 · 357 阅读 · 0 评论 -
HDU5916-Harmonic Value Description
给定一个n和k,要求组合1-n之间的数使它们gcd为第k小。 组合时相邻两数的gcd一定为1,因此要使得组合第k小,就可以将k与2k相邻,其余的各项相邻的数之间gcd为1. 可以这样排序: 2, 3, 4, … ,k, 2k, 2k+1, 2k+2, …, n, 1, k+1, k+2, … ,2k-1 其中区间[2, k],[2k+1, n],[1, 2k-1]都连续,因此区间内相邻gcd原创 2016-10-28 19:36:24 · 539 阅读 · 0 评论 -
2016 ACM/ICPC Asia Regional Dalian Online 大连区域赛部分题解
1007-Friends and Enemies用完全二分图表示朋友和敌人的关系,每个部分里的人和同一部分的其他人都是敌人,而与另一部分的人都是朋友,这样二分图的边就是不同鹅卵石的最大种类数,然后将这个与给出的种类数比较即可。//1007 #include <cstdio>int main(int argc, char const *argv[]) { long long m, n;原创 2016-09-16 19:21:42 · 1045 阅读 · 2 评论 -
HDU2846-Repository
典型的Trie树。 将所有的商品名字一段一段的输入,为了避免类似badad在统计ad时变成2这样多加了的情况,我们在insert时引入id。 这样能避免同一商品的重复增加。 另外G++和C++的内存分配好像不太一样,用C++能够AC但是用G++就会超内存。 不过Trie对内存的占用也是出了名的….//HDU2846 #include <cstdio> #include <cstring>st原创 2016-09-01 21:53:48 · 409 阅读 · 0 评论 -
HDU1276-士兵队列训练问题
类约瑟夫游戏,好像是可以用数学的方式计算出来….但是…. 那么模拟一下这个游戏,士兵们编好号放入链表中,然后不断出列,直到剩下3个人。 注意it = ls.erase(it);//HDU1276 #include <cstdio> #include <list>using namespace std;list<int> ls;int main(int argc, char const *argv原创 2016-09-01 21:48:30 · 1176 阅读 · 0 评论 -
BestCoder Round #77 (div.2)
1001 单元素集合所有子集异或后是它本身,其他集合异或后答案都为0; #include int ctn[1002]; int main() { int t; scanf("%d", &t); for (int i = 0; i < t; i++) { int n; scanf("%d", &n);原创 2016-03-27 14:22:37 · 285 阅读 · 0 评论 -
HDUOJ2553-N皇后问题
对于N皇后问题首先的代码 #include int IsLegal[3][25]; int cnt = 0; int cmd; void Dfs(int n) { if (n == cmd + 1) cnt++; else { for(int i = 1; i <= cmd; i++) { if(IsLegal[0][原创 2016-03-24 21:33:14 · 458 阅读 · 0 评论 -
HDU1010-Tempter of the Bone
这道题考查了深搜和剪枝,首先要恰好在t的时间内到达,从起点(bx, by)到终点(ex, ey)的最短距离为abs(ex-bx)+abs(ey-by),如果t小于最小距离就是NO。 另外t与最短距离之差如果是奇数也一定是NO。#include <cstdio> #include <cstring> #include <cstdlib>char maze[8][8]; int dx[4] = {-1原创 2016-08-03 15:14:56 · 205 阅读 · 0 评论 -
HDU1698-Just a Hook
线段树的成段更新问题,这里可以精简的删去build和query函数。#include <cstdio>#define lchild rt << 1, l, m #define rchild rt << 1 | 1, m + 1, rconst int maxn = 1 << 18;int tree[maxn]; int lazy[maxn];int n;void push_up(int rt) {原创 2016-08-15 17:07:59 · 267 阅读 · 0 评论 -
HDU1106-排序
这样简单的题还用了STL,很惭愧….#include <iostream> #include <string> #include <set> #include <algorithm>using namespace std;int a[1005];int main(int argc, char const *argv[]) { string s; while (cin >> s) {原创 2016-08-17 12:24:05 · 252 阅读 · 0 评论 -
HDU1078-FatMouse and Cheese
记忆化搜索即可。#include <cstdio> #include <cstring> #include <algorithm>using namespace std;const int maxn = 100 + 10;const int dx[4] = {-1, 0, 1, 0}; const int dy[4] = {0, -1, 0, 1};int grid[maxn][maxn]; int原创 2016-09-10 22:16:22 · 239 阅读 · 0 评论 -
HDU1671-Phone List
建立一个Trie树并且每次用完后将它删除并释放内存。#include <cstdio> #include <cstring> #include <cstdlib>char s[10000+10][100]; struct Trie { int cnt; Trie *next[10]; };void init(Trie *rt) { rt->cnt = 0; for (原创 2016-09-11 13:19:10 · 274 阅读 · 0 评论 -
HDU1754-I Hate It
典型的线段树问题,坑点在于有多组测试数据…#include <cstdio> #include <algorithm>using namespace std;const int maxn = 1 << 18;int n, dat[2*maxn-1];void init(int n_) { n = 1; while (n < n_) { n *= 2; }原创 2016-08-09 15:48:32 · 321 阅读 · 0 评论 -
HDU1870-愚人节的礼物
简单的模拟题,遇到‘(’加1,遇到‘)’减一即可。//HDU1870 #include <cstdio> #include <iostream> #include <string>using namespace std;int main(int argc, char const *argv[]) { string s; while (cin >> s) { int c原创 2016-09-01 21:45:46 · 566 阅读 · 0 评论 -
POJ1050&HDU1081-To the Max
从一个矩阵中寻找和最大的子矩阵,简单的枚举各种情况即可。 数组a表示原矩阵,b表示a中的某几行之和组成的新序列,这样就转换为求新序列的最大连续子序列的和问题了。#include <cstdio> #include <cstring> #include <algorithm>using namespace std;const int maxn = 100 + 5;int a[maxn][maxn];原创 2016-08-17 11:03:45 · 261 阅读 · 0 评论