- 博客(43)
- 收藏
- 关注
原创 第二章 字符串、向量和数组
一、命名空间的using声明using namespace :: std;1、头文件不应包含using声明。因为头文件中的内容会拷贝到所有引用它的文件中去,若头文件中有某个using声明,那么每个使用了该头文件的文件都会有这个声明,可能产生始料未及的名字冲突。二、标准库类型stringstring表示可变长的字符序列。定义和初始化string对象1、若提供一个字符串字面值初始化string,则该字面值中除了最后那个空字符外其他所有的字符都被拷贝到新创建的string对象中去。直接初始化和拷贝
2021-08-05 15:45:25 318
原创 第一章 变量和基本类型
多行注释风格注释内的每行都以一个星号开头,从而指出整个范围都是多行注释的一部分。多行注释不可嵌套使用。一、基本内置类型(算数类型+空类型)算数类型(整型+浮点型)1、一个char的空间应确保可以存放机器基本字符集中任意字符对应的数字值,即一个char的大小和一个机器字节一样。2、wchar_t类型用于确保可以存放机器最大扩展字符集中的任意一个字符。3、char16_t和char32_t为unicode字符集服务。4、float有7个有效位,double有16个有效位。5、字符型被
2021-07-23 09:19:44 207
原创 Heavy Transportation POJ - 1797
Heavy Transportation POJ - 1797背景雨果重工很高兴。Cargolifter项目崩溃后,他现在可以扩展业务。但是他需要一个聪明的人,告诉他从客户建造巨型钢起重机的地方到所有街道都可以承载重量的地方是否真的有办法。幸运的是,他已经制定了一个计划,包括所有街道和桥梁以及所有允许的重量。不幸的是,他不知道如何找到最大重量来告诉他的客户起重机可能会变得很重。但是你当然知...
2020-05-01 16:15:29 212
原创 0 or 1 HDU - 4370 思维最短路
0 or 1 HDU - 4370Given a nn matrix C ij (1<=i,j<=n),We want to find a nn matrix X ij (1<=i,j<=n),which is 0 or 1.Besides,X ij meets the following conditions:1.X 12+X 13+…X 1n=12.X 1n+...
2020-05-01 14:55:33 201
原创 昂贵的聘礼 POJ - 1062
年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要5000金币就行了。“探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西...
2020-04-27 21:21:00 181
原创 LightOJ-1074
Extended Traffic达卡市一天天变得拥挤而喧闹。某些道路总是拥堵。为了说服人们避免最短的路线,从而避免拥挤的道路到达目的地,市政府制定了一项新计划。城市的每个路口都标有正整数(≤20),表示路口的繁忙程度。每当有人从一个路口(源路口)到另一个路口(目的地路口)时,市政府都会从旅行者那里得到3(目的地的繁忙度-源的繁忙度)3(即差额的立方)。当局已任命您找出当某人从某个结点(零点)移...
2020-04-23 18:19:54 236
原创 全排列常用方法
一、next-permutation(元素必须有序)元素有序无序都可#include<cstdio>#include<algorithm>using namespace std;int a[] = {1, 2, 3, 4, 5}; int ans = 0;void f() { do{ for(int i = 0; i < 5; i++) pri...
2020-04-04 16:30:44 276
原创 基础数论
快速乘法(a*b)%p = (a%p)(b%p)%p如果模较大,a%p * b%p 可能会超出long long 的范围可以使用快速乘法ll fastMul(ll a, ll b, ll p) { a %= p; ll ans = 0; while(b > 0) { if(b & 1) ans = (ans + a) % p; b >>= 1; a...
2020-02-25 18:45:20 163
原创 博弈论
一、巴什博弈(Bash Game)只有一堆N个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取M个,最后取光者得胜。显然,如果N = M + 1,那么由于一次最多只能取M个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后取者胜。所以取胜的法则:每个回合都让物品剩下M + 1的倍数个,则先手必胜N = (M + 1) * R + S,R为任意自然数,S为小于M的数...
2020-02-18 21:42:10 233
原创 HDU - 4614 (线段树)
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 5e4 + 5;struct node { int sum, lazy;}tr[N << 2];int t, n, m, k, x, y;void pushu...
2020-02-18 20:30:27 287
原创 hdu - 4533 (区间合并 + 线段树)
维护两个线段树,一个男生的树, 一个女生的树#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 1e5 + 5;struct Node { int lmax, rmax, ...
2020-02-17 21:02:47 249
原创 hdu - 3974 (dfs序 + 线段树)
普通的线段树,给出的数据是有线性顺序的,可以根据数组的顺序直接建线段树,而此题,给的数据是树,怎么把题给的树映射到线段树上?利用dfs序in数组记录每个点一开始被访问的时间out数组记录从该点开始dfs后,dfs结束的时间#include<cstdio>#include<cstring>#include<algorithm>using name...
2020-02-16 16:52:43 199
原创 hdu - 1754 (线段树模板)
#include<cstdio>#include<algorithm>using namespace std;const int N = 200005;int num[N], tr[N << 2], n, m, x, y;char str[2];void build(int node, int l, int r) { if(l == r) {...
2020-02-16 15:43:02 116
原创 hdu - 1166 (树状数组模板)
#include<cstdio>#include<cstring>const int N = 50005;int d[N], num[N], n, x, y;char str[10];int lowbit(int x) { return -x & x;}void add(int i, int num) { while(i <= n) {...
2020-02-16 15:06:34 164
原创 Layout POJ - 3169(差分约束 + Bellman-Ford模板/SPFA模板)
差分约束相关概念:假设:x1 - x2 <= k1x2 - x3 <= k2x1 - x3 <= k3==>整理得x1 - x3 <= k1 + k2x1 - x3 <= k3x1和x2的最大差值就是min(k1 + k2, k3)转化为图其实就是x1到x3的最短距离。POJ-3169可得:d[AL] + DL >= d[BL]...
2020-02-13 22:35:29 185
原创 Conscription POJ - 3723 (kruskal模板)
求一个最大生成树即可#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 2e4 + 5, M = 5e4 + 5;struct edge{ int u, v, w; bool operator < (const edge...
2020-02-13 20:26:40 219
原创 Sightseeing POJ - 3463
题意:求最短路和次短路的路径数之和,其中最短路刚好比次短路小1dist数组更新过程中, 如果 w 比当前最小值小则更新,如果刚好等于最小值,路径数就加1同理,如果 w 比当前次小值小,比最小值大,则更新,如果刚好等于次小值,路径数加1最后如果满足 次短路径长度 - 最短路径长度 == 1, 则由加法原理得最终的结果是,最小路径的数量加次小路径的数量。#include<cstdio&...
2020-02-09 19:49:36 154
原创 Roadblocks POJ - 3255
关键是弄清次短路径是怎么求得的:两种情况:1、u——>v, 到u的最短距离加u到v的距离2、到u的次短距离加u到v的距离其实就是动态规划#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;const i...
2020-02-09 17:46:10 171
原创 COURSES POJ - 1469(匈牙利模板)
#include<cstdio>#include<cstring>struct edge{ int v, next;}e[30005];int head[105], len = 1, p, n, k, v, mat[305];bool vis[305];void add(int u, int v) { e[len].v = v; e[len].next...
2020-02-09 14:34:55 121
原创 还是畅通工程 HDU - 1233
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n, g[105][105], d[105], u, v, w, ans;bool vis[105];void prim() { memset(d, 0x3f, sizeof(d)); mem...
2020-02-08 20:30:57 159
原创 Networking POJ - 1287 (prim模板)
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int g[55][55], n, m, u, v, w, d[55], res;bool vis[55];void prim() { memset(d, 0x3f, sizeof(d)); mems...
2020-02-08 19:31:54 118
原创 一个人的旅行 HDU - 2066 (多起点最短路径)
建立一个到各个起点权重为0的新起点,用一次dijkstra#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;const int N = 1000005;int u, v, w, len, head[N], d[N...
2020-02-07 20:16:41 325
原创 Invitation Cards hdu-1535(反向建图)
回来时,求从每个点到起点的最短距离和,可以反向建图后从起点再用一次dijkstra#include<cstdio>#include<cstring>#include<queue>using namespace std;const int N = 1000005;int n, p, q, u, v, w, len, rlen, head[N], rh...
2020-02-07 19:47:58 141
原创 最短路 hdu-2544
floyd:O(N^3)#include<cstdio>#include<cstring>#define min(a, b) (a < b ? a : b)const int N = 110;int n, m, g[N][N], a, b, c;void floyd() { for(int k = 1; k <= n; k++) { fo...
2020-02-07 19:06:12 177
原创 Genealogical tree poj-2367(拓扑序模板)
#include<cstdio>#include<queue>using namespace std;int n, in[110], len = 1, head[110];struct edge{ int v, next; }e[20000];void add(int u, int v) { e[len].v = v; e[len].next = he...
2020-02-07 18:39:07 153
原创 MPI Maelstrom poj - 1502 (floyd模板,dijkstra模板)
O(N^3)因为此题n的范围较小,可以用floyd#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int inf = 0x3f3f3f3f;int n, g[110][110];char str[20];void floyd() {...
2020-02-07 17:39:12 172
原创 hdu-3038 (带权并查集)
输入样例10 51 10 1007 10 281 3 324 6 416 6 1输出1因为输入描述的是闭区间,这里求【3-7】是求不出的,必须改为开区间所以(0,10]=100, (6, 10]=28, (0, 3]=32之后的问题就简单了如果某一段区间的值和之前的值冲突则是错的注意序列中可能存在负数,所以如果(0,10)=100, (0, 9)=1000是可能...
2020-02-05 17:51:57 277
原创 poj-1182 食物链(带权并查集)
《挑战程序设计竞赛》中的解法:开三倍的数组模拟边之间的关系,结果会memory limit exceeded#include<cstdio>int p[150010], n, k, d, x, y;void init() { for(int i = 1; i <= 3 * n; i++) { p[i] = i; }}int find(int x) { ...
2020-02-05 15:53:10 164
原创 poj 2431 (优先队列的使用)
坑点:1.给的距离是加油站到小镇的距离2.输入不一定有序,需要排序思路:到达一个加油站就将可以加的油量入队,当剩余油量小于0时,再去访问优先队列加油代码:#include<cstdio>#include<algorithm>#include<queue>using namespace std;int n, L, P;struct node...
2020-02-03 19:04:16 128
原创 POJ-1014 多重背包
#include<cstdio>#include<cstring>#define max(a, b) (a > b ? a : b)int a[10], sum, dp[10005 * 6];int main() { int cnt = 0; while(true) { cnt++; sum = 0; memset(dp, 0, sizeo...
2020-02-02 19:49:28 366
原创 Manacher算法
一个字符串中找到最长回文子串先在字符串中加上虚轴回文半径数组:arr[ ] ,以每个字符为中心的回文串长度的一半回文右边界:每个字符为中心的回文串的右边界C : 最早扩充到每一个右边界的回文中心扩充方法:1、当前位置i不在回文右边界里,暴力扩2、当前位置i在回文右边界内:a、i ’ 回文在L,R内 O(1)此时回文半径和 i ’ 一样b、i ’ 回文在L,R外 O(1)...
2020-01-31 18:34:49 96
原创 KMP算法
next数组 :str2数组(短的那个数组)中每个字符的匹配的最长前缀和最长后缀的长度流程#include <cstdio>#include <cstring>int next[1000], n, m;char str1[10000], str2[1000];void getNext() { next[0] = -1; next[1] = 0; in...
2020-01-31 15:40:53 99
原创 背包问题
Backpack给定N个物品,重量分别为正整数A0,A1,…,AN-1一个背包最大承重是正整数M最多能带走多重的物品例子:输入:4个物品,重量为2,3,5,7 背包最大承重是11输出:1001背包问题#include <cstdio>#include <algorithm>using namespace std;int d[1000], w[10...
2020-01-30 14:18:28 190
原创 博弈型动规
博弈为两方游戏一方先下,在一定的规则下一次出招如果满足一定条件,则一方胜目标:取胜coins in a line有一排N个石子,Alice,Bob两人轮流取石子每次一个人可以从最右边取走1个或2个石子取走最后石子的人获胜问先手Alice是否必胜例子:输入:N=5输出:true(先手拿两个)博弈动规通常从第一步分析,而不是最后一步因为局面越来越简单,石子数越来越少面对N个...
2020-01-30 11:07:29 171
原创 划分型动规
划分型动规:给定长度为N的序列或字符串,要求划分成若干段—段数不限,或指定K段—每一段满足一定的性质给定一个正整数N问最少可以将N分成几个完全平方数(1,4,9,…)之和例:输入:N = 13输出:2(13 = 4 + 9)确定状态:最后一步:关注最优策略中最后一个完全平方数 j ^ 2最优策略中 n-j^2 也一定被分成最少的几个完全平方数之和得到子问题状态:设f[i...
2020-01-29 13:26:05 222
原创 Russion Doll Envelopes
给定N个信封的长度和宽度如果一个信封的长和宽都分别小于另一个信封的长和宽,则这个新房可以放入另一个信封问最多嵌套多少给信封例:输入:(5,4),(6,4),(6,7),(2,3)输出:3([2,3]=>[5,4]=>[6,7])将所有信封按照长度一维进行排序,这样就可以只按一个方向进行考察状态方程:d[i] = max(1, d[j] + 1)#include <...
2020-01-28 12:53:53 306
原创 最长上升子序列
例输入:4 2 4 5 3 7输出:4(2 4 5 7)#include <cstdio>#include <algorithm>using namespace std;int a[100000], d[100000], n;int DP() { int res = 0; int k; d[0] = 1; for(int i = 1; i &l...
2020-01-28 11:34:23 101
原创 Best Time To Buy And Sell Stock(序列型动归)
1、已知后面N天一支股票的每天价格P0,P1,…,PN-1可以最多买一沽卖一股求最大利润例输入:3 2 3 1 2输出:1(2买入,3卖出)如果买卖一股, 一定是第i天买,第j天卖(j >i),获利是Pj - Pi枚举j,即第几天卖显然,希望找到最小的买入价格Pi(i<j)#include<cstdio>#include<algorithm&...
2020-01-27 20:26:47 137
原创 Housh Robber 加强版
有一圈房子,房子i-1里有A[i]个金币一个窃贼想选择一些房子偷金币但是不能偷任何挨着的两家邻居,否则会被警察逮住最多偷多少金币输入:3, 8, 4输出:81.房子0不偷, 把房子 0 去掉,则变成了1到n-1的房子的第一种情况2.房子n-1不偷, 把房子n去掉,则变成了0到n-2的房子的第一种情况两种情况分开求,再求一次最大值小结:圈的情况比较复杂, 但通过0和 n-1不...
2020-01-27 16:50:43 162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人