- 博客(166)
- 收藏
- 关注
原创 HeadFirst读书笔记
1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起,好让其他部分不会受到影响。代码引起的不经意后果变少,系统变得更有弹性。每次新需求一来,都会使某方面的代码发生变化,那么就可以确定,这部分代码需要抽出来和其他稳定的代码有所区分。1、使用模式最好的方式“把模式装进脑子里,然后在你的设计和已有的应用中,寻找何处可以使用它们”。以往是代码复用,现在是经验复用。2、软件开发的一个不变的真理就是变化。
2024-02-25 12:37:11
683
原创 2019 Multi-University Training Contest 10 1005:Welcome Party
Welcome Party 题意: 有n个学生,每个学生都有歌唱和相声能力。选择一个集合A,一个集合B。使得集合A里面的最大值与集合B的最大值的差值最小。 思路: 按歌唱能力从大到小枚举,枚举到当前学生的歌唱能力,那么比该学生歌唱能力强的都应该去表演相声,用multiset维护一下。同时其他的还没有枚举到的找到当前学生唱歌能力的最接近的值。最后对答案取下min即可。 代码: #inc...
2019-08-22 10:00:12
482
原创 2019 Multi-University Training Contest 10 1003:Valentine's Day
Valentine's Day 题意: 任选k个礼物,求能使得女朋友高兴一次的最大概率。 思路: 枚举能使得概率变大的p即可。 代码: #include<bits/stdc++.h> using namespace std; double p[10005]; const double eps=1e-7; int main(){ int T; scanf("%d",&a...
2019-08-21 20:30:51
373
原创 2019牛客暑期多校训练营(第十场)J:Wood Processing
Wood Processing 题意: n块木板拼成k块。拼接的方式是横向连接,纵向选择一个不高于最高高度的h使得所有块里面的高度相等。去掉的高度是浪费的东西,求最小的浪费量。 思路: 设dp[i][j]表示前i块木板拼接成j块的最少花费。 dp[i][j]=min(dp[k][j-1]+sum[i]-sum[k]-(sumw[i]-sumw[k])*h[k+1]) k从0枚举到i-1。...
2019-08-20 17:01:00
514
原创 2019牛客暑期多校训练营(第十场)F:Popping Balloons
Popping Balloons 题意: 选3条横线,3条竖线,相邻线之间的距离不超过r,求能穿过的最大点数。 思路: 考虑只有一条横线,一条竖线的情况。利用竖线权值线段树维护该横坐标能通过的点数,枚举竖线,考虑该点会重复计算,所以先取出来,计算完后再加回去。3条横线,3条竖线类似。 代码: #include<bits/stdc++.h> using namespace ...
2019-08-20 15:27:09
312
原创 2019牛客暑期多校训练营(第十场)E:Hilbert Sort
Hilbert Sort 参考博客:https://blog.youkuaiyun.com/qq_41117236/article/details/99694107#commentsedit 代码: #include<bits/stdc++.h> using namespace std; struct node{ int x,y,num; }a[1000005]; int cmp(nod...
2019-08-20 10:43:01
179
原创 2019牛客暑期多校训练营(第十场)D:Han Xin and His Troops
Han Xin and His Troops 扩展中国剩余定理模板题,但是会爆long long。 java大数代码 import java.math.BigInteger; import java.util.Scanner; import java.util.*; import java.io.*; public class Main { static BigInteger a[]=n...
2019-08-20 08:51:16
186
原创 2019牛客暑期多校训练营(第十场)B:Coffee Chicken
Coffee Chicken 题意: 给定两个字符串构成斐波拉契数列,问第n个字符串的从第k个字符开始的10个字符。 思路: 因为k最大是1e12。所以预处理500个即可,然后递归求解。 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ll f[510],k; const ll ...
2019-08-20 08:35:02
214
原创 Codeforces 835D-Palindromic characteristics(DP)
Palindromic characteristics 题意: 给你一个字符串,求出它的k阶回文子串有多少。k阶回文子串的定义,它本身是回文串,左半部分和右半部分相等,且都是k-1阶回文子串。 思路: dp[i][j]表示字符s[i...j]最大是几阶,当si ! = sj 或 dp[i+1][j-1]=0 时它不是回文串。否则 dp[i][j] = dp[i][i+len/2-1] + ...
2019-08-16 10:21:31
386
原创 The Bakery(DP+线段树)
The Bakery 题意: 将一些数分成k段,每段的价值是里面不同数的个数,求能分得的最大值。 思路: 设dp方程 dp[i][j] 表示前 j个数分成 i段的最大值。转移方程 dp[i][j]=dp[i-1][x]+val[x]。1<=x<=j 。那么我们用线段树维护1到 j 的最大价值。对于每一个位置,找到前面最后一个与它数字相同的的位置,把这之间线段树的值都加上1。 ...
2019-08-15 10:27:36
292
原创 2019杭电多校第七场1010:Just Repeat
Just Repeat 题意: 两个人轮流出牌,规定出的牌的颜色不能和对方已经出过的牌一致,谁不能出牌,谁就输了。 思路: 每个人优先出的牌的颜色肯定是场上没出过的,对方也持有的,并且两个人手中持有数量最多的牌.对方持有的越多意味着可以封掉 更多的牌,而自己手里的越多意味着可以防止自己更多的牌被封掉.因此将手里的牌统计好,从大到小分配,最后看手里牌数量即 可判断输赢。可能会卡m...
2019-08-14 10:36:23
265
原创 2019杭电多校第七场1001:A + B = C
A + B = C 题意: 给定 a b c 求出 x y z 使得 a * 10^x + b * 10^y = c * 10 ^z 。 思路: a + b = c,要么a+b有进位,要么没有进位。那么判断题目是否有解只要判断 b | ( c - a ) (|)是整除符号。 b | ( c*10 - a ) , a | ( c*10 - b ) ,a | ( c- b ) 四种情...
2019-08-13 17:02:03
318
原创 2019杭电多校第七场1006:Final Exam
Final Exam 题意: 有n个题目,总共m分,每个题目可能的分值为 0--m 。答对一道题最少要复习分值加1的时间,问答对k题需要的最少复习时间。 思路: 出题人可能会卡掉你分值小的n-k+1 个题目,最坏的情况是 m 的分值平均分配到 n - k + 1个题目上。那么剩下的 k - 1 个题目我们花费大于其中 n - k + 1 个题目的最大值。最后再保证其中的 n - k +...
2019-08-13 15:34:13
243
原创 2019杭电多校第七场1011:Kejin Player
Kejin Player 题意: 每升一级要花费ai,升级有ri/si的几率成功,失败掉到xi级,给出q个询问,求出l到r级的花费。 思路: 尝试次数temp=s/r,尝试了temp次,那么有temp次失败了,一次成功。当前等级花费为sum[i],sum[i+1]=(temp-1)*(sum[i]-sum[xi]+ai)(失败)+ai成功。 #include<bits/stdc+...
2019-08-13 11:06:13
314
原创 White Lines
White Lines 题意: 每次可以将k*k的区域擦成白色,只擦一次问可以得到的最多的白线条。 思路: sumr[i][j]:表示第i行(1~j)列有多少个'B'。 sumc[i][j]:表示第j列(1~i)行有多少个'B'。 R[i][j]表示第i行消除(j~j+k)列是否会产生新的白线行。 C[i][j]表示第j列消除(i~i+k)行是否会产生新的列。 ansc[i][j]...
2019-08-13 10:41:32
463
原创 Compress Words
Compress Words 题意: 将给定的单词去掉最长的相同前后缀拼接起来。 思路: 双hash #include<bits/stdc++.h> using namespace std; typedef long long ll; const int mod1=1e9+7; const int mod2=1e9+9; const int p=131; const int...
2019-08-13 10:25:02
613
原创 All-one Matrices
All-one Matrices 题意: 求出所有没被其他子矩阵包括的所有全1矩阵。 思路: 对于每个格子(i,j),记录它能向上延升的距离。同时还要记录它能向左延申的位置,那么对于一个全1矩阵,(i-up+1,pos)->(i,j)就符合要求,我们从底往上枚举即可,用单调栈维护。 #include<bits/stdc++.h> using namespace st...
2019-08-11 10:40:20
769
原创 并查集
Wireless Network #include<cstdio> #include<cmath> using namespace std; struct node{ int x,y,ok,fa; }a[1005]; int d; int find(int x){ if(x!=a[x].fa) a[x].fa=find(a[x].fa); return a[x...
2019-08-06 16:51:43
147
原创 最短路
Til the Cows Come Home #include<cstdio> #include<vector> #include<queue> #include<algorithm> #include<cstring> using namespace std; int d[1005]; int vis[1005]; typedef ...
2019-08-06 16:26:30
154
原创 DLX
Radar 题解:https://blog.youkuaiyun.com/sr_19930829/article/details/39853743 #include<bits/stdc++.h> using namespace std; const int maxnode = 3000; const int MaxM = 55; const int MaxN = 55; int K; str...
2019-08-06 14:53:50
689
原创 An impassioned circulation of affection
An impassioned circulation of affection 题意: 给定字符串,有q个操作,每次可以将m个字符变成c,问能将c字符变得最长的长度。 分析: 二分 #include<bits/stdc++.h> using namespace std; int pos[30][1505],temp[1505],n,ans[1505][30]; char s...
2019-08-01 10:32:09
242
原创 搜索进阶
Eight #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<queue> #include<vector> using namespace std; const...
2019-07-30 16:44:47
200
原创 Find the answer(线段树)
Find the answer 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+5; ll sum[N<<2]; int a[N],b[N],v[N*4],ans[N]; void up(int o,int l,int r,int k){ i...
2019-07-30 09:52:01
506
原创 Sagheer, the Hausmeister
Sagheer, the Hausmeister 题意 : 有一个n行m+2列的01矩阵,最初在左下角的位置,0表示灯关,1表示灯开,问你关闭所有的灯所需要的时间,最后不需要回到原位置。 分析: 考虑dp,dp[i][0]表示关完i层从左边楼梯走,dp[i][1]表示从右边走。 代码: #include<bits/stdc++.h> using namespace std...
2019-07-29 09:24:27
241
原创 sequence
sequence 题意:求一段区间里面a数组的最小值乘b数组的区间和,求的该值的最大值。 思路:单调栈维护ai左右延伸区间,线段树维护b数组前缀和数组的最大最小值。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=3e6+5; ll sum[maxn],m...
2019-07-28 17:14:21
797
原创 D. Vladik and Favorite Game
D. Vladik and Favorite Game 题意:交互题,在一个地图上,起点是(1,1)终点是F,在开始可能会交换l,r,u,d。每次输出方向,电脑给出一个坐标。 思路:先跑一遍bfs,记录路径,再根据输入的坐标更改方向。 #include<bits/stdc++.h> using namespace std; int dir[4][2]={{0,1},{...
2019-07-28 10:26:08
252
原创 Vladik and Memorable Trip
Vladik and Memorable Trip 题意:给定一个数列,划分一些区间,规定该区间里面包括该区间出现的所有数字,该区间的贡献是区间里面不同数的异或和,答案是求能划分的最大值。 思路:dp,dp[i]表示从1到i划分所能取到的最大值,维护每个数的左右边界即可。 #include<bits/stdc++.h> using namespace std; ...
2019-07-28 10:22:41
362
原创 Keen On Everything But Triangle
Keen On Everything But Triangle 题意:给定区间,从区间里取3个数问能组成的最大三角形周长。 思路:主席树模板题,每次求区间剩下的最大,次大,第3大。 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef...
2019-07-24 20:09:15
777
原创 简单搜索
棋盘问题 #include<cstdio> #include<cstring> int vis[10]; char mp[10][10]; int n,k,sum,cnt; void dfs(int s){ if(cnt==k){ sum++; return; } if(s>=n) return; for(int i=0;i<n;i++...
2019-07-23 17:28:34
235
原创 Vacation
Vacation 题意:在一条道路上,有许多车,给定位置速度以及车长,问你到达终点的时间,你会被你前面车速小于你的挡住导致你只能跟它跑一样的速度。 思路:思维题,考虑每辆车被挡住的情况,最后取一遍最大值,答案就是这个最大值 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll l[10...
2019-07-23 15:38:58
533
原创 Path
Path 题意:求最少的花费使得从1到n的距离变长。 思路:跑两次最短路,如果d[u]+d[v]+w==d[n]那么在最短路上,用这些边建图,跑最大流即可。 代码来自:https://blog.youkuaiyun.com/qq_41730082/article/details/96874510 #include "bits/stdc++.h" #define INF 0x3f3f3f3f...
2019-07-23 15:32:02
224
原创 Operation
Operation 题意:两种操作,0 l r在l,r之间任意选择一些数使得异或值最大。1 x在末尾插入x值。 思路:维护一个前缀线性基即可。 #include<bits/stdc++.h> using namespace std; const int N=1e6+5; int n,q,c[N]; int pos[N][30],p[N][30]; void inser...
2019-07-23 15:21:59
1880
原创 2019JXCPC重现赛(未完待续)
Cotree 题意:有两棵树,一共n个点,在两棵树上连一条边,使得他们变成一棵树,问如何连边使得他们题目中的式子最小。 思路:树中所有点到某个点的距离和中,到重心的距离和最小,先求得重心,然后求连接重心后节点的两两距离和即可。摘自 #include<bits/stdc++.h> using namespace std; typedef long long ll;...
2019-07-23 11:20:24
309
原创 Second Large Rectangle
Second Large Rectangle 题意:从一个01矩阵里面找到全是1的第二大的矩形面积。 思路:悬线法求最大的标记一下,第二大的就容易求出来了。 #include<bits/stdc++.h> using namespace std; const int maxn = 1005; int a[maxn][maxn]; int vis[maxn][maxn]...
2019-07-21 08:58:06
338
原创 Equivalent Prefixes
Equivalent Prefixes 题意:选择最大的p,使得a数组和b数组1到p的任意子区间里面最小值的下标相同。 思路: 1.笛卡尔树。 2.用数组记录每个数左边第一个小于它的数,最后比较两个数组相同的最大位置即可。 版本1 #include<bits/stdc++.h> using namespace std; const int maxn=1e5+5;...
2019-07-19 09:36:23
377
原创 The Moon
The Moon 题意: 1.最开始有q=2%的几率掉落物品。 2.你有p%的几率赢的游戏,赢了有q%的几率掉落物品,输了q+1.5%. 3.没掉落q+2%,重复2,3.掉落结束游戏。 问游戏次数期望。 思路: 记忆化搜索。dp[i][j]表示当p=i,q=j时的次数,有两种情况,1种是没赢,1种是赢了但没掉落物品。把p扩大100倍,q扩大200倍。 1.获胜并且没掉落物品 ...
2019-07-17 15:20:19
351
原创 Strength
Strength 题意:你有n个怪物,敌方有m个怪物,你攻击对方攻击状态的怪物,对方会损伤两个怪物攻击值的差值的血量,当然你的怪物的攻击力肯定要大于对方的。攻击防御的则对方不受伤害,最后还剩多少怪物,他就直接承受他们的伤害,问怎样使得对方所受伤害最大。 贪心:两种情况,你能把所有的怪打死,选最少的花费去攻击防御怪,剩下的减去攻击怪即可,你不能把所有怪打死就每次选最大的打最小的攻击怪。 ...
2019-07-17 10:18:42
728
原创 Justice
Justice 题意:给定n个k,k代表1/2^k,问最后能否选择一些数的和使得有两个数大于等于1/2 思路:要构成一个1/2,需要1个1,2个2,4个3...也可以是1个2+2个3...那么把k从小到大排序,设定一个p代表现在需要的数,cnt1,cnt2,表示两份组成1/2需要p的数量。我们只管最后能组成两份1/2,其他的不管。学个数据模拟一下。 3 3 3 3 4 4 4 4 5...
2019-07-17 09:16:13
244
原创 Fancy Signal Translate
Fancy Signal Translate solution:长度为i的不同串有2^i个,则没出现的长度最短的串长度不会超过18,那么枚举长度不超过18的串,转换成10进制,打上标记,那么没被标记的最短串长度即为答案。 #include<bits/stdc++.h> using namespace std; int vis[1000005]; char s[1000005]...
2019-07-16 09:41:14
346
原创 Remember the Word(Trie)
Remember the Word 给出由s个不同单词组成的字典和长字符串,把这个字符串分解成若干个单词的连接,有多少种方法。 递推加trie #include<bits/stdc++.h> using namespace std; const int maxn=4005; const int maxnode=maxn*100+5; const int mod=200...
2019-07-15 18:29:11
327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅