自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (1)
  • 收藏
  • 关注

原创 问题 B: 计数-----------------------------思维(组合数学)

题目描述Alice和Bob在平面直角坐标系中下棋。Alice的棋子初始时在(0,0)位置,要走到(a,b)位置;Bob的棋子初始时在(c,0)位置,要走到(a,d)位置。棋子只能沿x轴或y轴正方向移动若干个单位长度,问有多少种移动方案使两颗棋子的移动路径不相交。输入输入一行4个正整数,依次为a,b,c,d。输出输出总方案数对质数 100000007 取模的结果。样例输入 Copy3 ...

2020-03-30 23:37:06 382

原创 被3整除的子序列-----------------------------dp(整除倍数型dp求方案数)

解析:这种线性dp也是一个套路题突破口:对3的余数处理f[i][02]:表示前i个数之和%3余(02)的所有情况所以我们只要枚举余数的状态即可状态转移方程:f[i][j]=f[i-1][j]+f[i-1][(j+3-m)%3]f[i-1][j]:表示第i个数不选,选第i-1个且余数为j的f[i-1][(j+3-m)%3] :表示第i个数选,因为我们枚举的是j,我们要判断第i-1...

2020-03-30 16:23:58 156

原创 筛质数-------------------------------数论(模板)

给定一个正整数n,请你求出1~n中质数的个数。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示1~n中质数的个数。数据范围1≤n≤106输入样例:8输出样例:4时间复杂度: O(nlogn)#include<bits/stdc++.h>using namespace std;const int N=1e6+10000;int prime[N]...

2020-03-30 15:08:48 151

原创 问题 E: 矩阵转换---------------------------------------------思维(套路题)

题目描述冬冬获得两个大小为n行m列的矩阵A和B,每个矩阵仅包含0和1。冬冬可以对矩阵A进行任意次数以下的操作:取矩阵A的任何具有至少两行和两列的子矩阵,并反转其四个角上的值(即0变成1,1变成0)。冬冬想知道A是否能转换成B。输入测试包含多组数据,第一行输入一个正整数t(3≤t≤10)表示测试数据的组数。接下每每组测试数据的输入如下:第一行输入两下正整数n,m(2≤n,m≤500),...

2020-03-30 13:51:46 481

原创 问题 F: 放牛奶的冰箱--------------------------------------------思维(二分)

题目描述冬冬在古子城购买了一台冰箱,冰箱内部可以表示为高度为h,深度为1,宽度为2的矩阵,最初冰箱底部只有一个架子,但冬冬可以在任何一个格子顶部放隔板,隔板的宽为2,不占用任何空间,将冰箱内部分隔成上、下两部分。冬冬有n瓶牛奶要按顺序放入冰箱里。第i瓶牛奶的高度是ai,深度和宽度均为1。如果架子上方的相应空间至少与瓶子一样高,他可以在一个架子上放一瓶牛奶,他不能将两瓶牛奶叠在一起(如果它们之间...

2020-03-30 12:37:33 232

原创 问题 G: 抢占城堡-----------------------------------思维

题目描述冬冬正和他的朋友一起玩抢占城堡的游戏,该游戏可以表示为大小为n×m的网格,每个格子最多只能容下一座城堡,每个格子有三种状态:1、空城堡用“.”表示;2、障碍物用“”表示,所有玩家都不能通过它;3、一名游戏玩家的编号即为数字x,表示该城堡被x占领。游戏是按玩家编号从小到大轮流进行的,在每一轮中,玩家轮流扩张势力范围:首先,第一个玩家扩张,然后第二个玩家扩张,依此类推。扩张规则如下:...

2020-03-30 11:54:50 326

原创 问题 M: Construct Sequences----------------------------------------思维(构造+套路题)

题目描述You are given a permutation p of the set {1,2,…,N}. Please construct two sequences of positive integers a1, a2, …, aN and b1, b2, …, bN satisfying the following conditions:·1≤ai,bi≤109 for all i...

2020-03-30 11:45:03 284

原创 问题 F: 篮球运动----------------------------------------思维(dp)

题目描述小明建造了一个篮球场,他请来了2行n列的人,想让他们进行比赛。每一个人都有一个能力值,第一行分别为h11,h12,…,h1n,第二行为h21,h22,…,h2n。现在小明可以选一些人组成一个最强团队。但是选人是有规则的,因为选一个人会让附近的人都很妒忌,所以他既不会同一行里连续选择2个人,也不会同一列里的连续选择2个人。现在他希望所选团队的能力值的之和最大,但人太多了,所以他想请聪明的...

2020-03-29 14:20:32 259

原创 问题 G: 电脑游戏------------------------------------二分(只要能枚举且具有单调性)

题目描述小明在玩电脑游戏。游戏中总共有q个关卡。每个关卡的开始,他都会有k滴血,初始得分0分,他需要抵抗n波怪物攻击,如果最终玩家的血量严格大于0滴则为胜利(等于0滴也不算胜利)。每波怪物攻击共有两种,第一种攻击是扣a滴血,但可以加1分,第二种攻击是扣b滴血(b<a),不能获得分数。现在,他想知道每一关是不是能玩出来(每一关共有n波攻击,对于每一波攻击,他要么选择抵抗第一种要么选择抵抗第二...

2020-03-29 11:47:40 391

原创 Tree Queries----------------------------------------思维(LCA)

题意:给定一棵有根树,树根为1。再给出m个查询,每个查询有k个数。问能否找到一条链使得查询每个点到链的距离<=1解析:我们先找到这k个数中深度最大的节点,其余点依次和深度最大的节点(id)比较 如果 abs(depth[lca(id,x)]-depth[x])>1 那么输出NO#include<bits/stdc++.h>using namespace s...

2020-03-29 11:02:08 212

原创 问题 A: 统计-----------------------------------------------思维(离散+二分)模板

题目描述给定n个数,有m个询问。每次询问, Alice想知道区间内[l, r]内是否出现过xi这个数。输入第一行一个整数n。第二行n个正整数ai。第三行一个整数m。接下来m行每行三个整数li, ri和xi, 表示询问区间为[li, ri], 询问数字为xi。输出对于每个询问,输出一个字符。‘0’表示没出现,‘1’表示出现了。样例输入 Copy51234567 666666 3...

2020-03-29 10:00:48 362

原创 操作集锦------------------------------------------------思维(方案数dp)

解析:设f[i][j]:表示选第i个字符,长度为k的且本质不同的子序列方案数状态方程:f[i][j]=f[i-1][j]+f[i-1][j-1] 不选s[i]/选s[i]但是会有重复的,我们用last记录字符之前出现过的位置。然后减去那部分f[i][j]-=f[last-1][j-1]f[last-1][j-1] 就相当于重复的方案数加上第i个字符#include<bit...

2020-03-28 10:28:04 101

原创 World Cup Fever-------------------------------------------思维(最短路)

题意:有两个队伍,第一支队伍从1号球员开始传球,一直传到N号球员。第二支队伍会阻拦第一支队伍。请问第一支球队是否能从1号球员传到n号球员传球:当a和b之间没有人时,可以 传球。不能传球:当a和b之间存在人时,无法传球解析:因为n的范围很小,所以我们枚举每个球员之间是否可以传球。可以传球我们把d[i][j]=1,不能传球设置为d[i][j]=0x3f3f3f3f。然后floyd...

2020-03-26 13:45:27 188

原创 Rounding Many Ways------------------思维(套路)

题意:XY=10^Z,XW=N给定N,求有多少个X解析:由第一个式子可知:10的幂次的因子只有2和5所以分解N有多少个2和多少个5,然后组合起来即可#include<bits/stdc++.h>using namespace std;typedef long long ll;ll n;ll quick(ll a,ll b){ ll res=1; whil...

2020-03-26 12:56:41 138

原创 First Last Sorting--------------------------------------思维

题意:给你n个数的排列,每次只能把元素移动最前面或着最后面,请问至少移动几次使得n个数升序解析:突破口:严格递增的子序列是不需要移动的.例: 8 3 6 7 4 1 5 2严格递增的子序列(3,4,5)逆向思维找出最长的严格递增的子序列 然后用n减去,就是我们需要移动的次数#include<bits/stdc++.h>using namespace std;co...

2020-03-26 12:42:21 131

原创 问题 M: Playing Tag on Tree------------------------------思维(图论)

题目描述We have a tree with N vertices. The i-th edge connects Vertex Ai and Bi bidirectionally.Takahashi is standing at Vertex u, and Aoki is standing at Vertex v.Now, they will play a game of tag as ...

2020-03-25 16:21:08 326

原创 P3384 【模板】轻重链剖分----------------------------模板

概念:重儿子:父亲节点的所有儿子中子树结点最多(size[x])的节点轻儿子:dep[x]:x的深度size[x]:以x为根的子树节点个数总和id[x]:dfs序所访问的编号fa[x]:保存u的父亲节点son[x]:保存重儿子rk[x]:保存当前dfs序标号在树中所对应的节点top[x]:保存重链的顶点#include<bits/stdc++.h>usin...

2020-03-25 15:08:08 233

原创 选点---------------------------------------树形dp

解析:由题意可知,就是树的先序遍历(本题先右子树再左子树),然后求最长上升子序列(nlogn) 做法#include<bits/stdc++.h>using namespace std;const int N=1e5+1000; typedef long long ll;int l[N],r[N];int a[N],b[N],cnt;ll q[N]; ll w[N...

2020-03-24 23:35:48 135

原创 问题 J: Shorten Diameter-------------------------------思维(图论+树的直径)

题目描述Given an undirected tree, let the distance between vertices u and v be the number of edges on the simple path from u to v. The diameter of a tree is the maximum among the distances between any tw...

2020-03-24 22:41:45 251

原创 E. Count The Blocks----------------------------思维(打表找规律)

解析:打表:f[1]=10,f[2]=180,f[3]=2610得出f[i]= 20 * f[i-1]-100 * f[i-2] (i>3)#include<bits/stdc++.h>using namespace std;const int N=2e5+1000;const int MOD=998244353;typedef long long ll;ll ...

2020-03-24 16:40:14 104

原创 C. Game with Chips---------------------------思维

题意:给定N*M的棋盘和k个点,再给出k个点需要到达的位置。输出移动的路径。解析:突破口:至多能走2nm步。第一步:我先让k个点全部移到左上角第二步:绕s型遍历即可。#include<bits/stdc++.h>using namespace std;#define x first#define y secondconst int N=1e5+10;typ...

2020-03-24 16:04:17 388

原创 Find my Family-----------------------------------------思维(set)

解析:预处理每个数右边的最大数 O(n)用set存i前面的数,二分查询有没有比当前i大的,且比i的右边的最大值小的。时间复杂度O(nlogn);#include<bits/stdc++.h>using namespace std;const int N=3e5+1000;int maxn[N],n;int a[N];int main(){ int t;vec...

2020-03-24 13:55:20 142

原创 E - Dividing Chocolate-------------------------------思维(二进制枚举)

题意:给你h长,w宽矩阵 的黑白巧克力,1代表是白色,0是黑色每次可以行切一刀,列切一刀,一切就要切到底的那种问最多切多少刀,使得每一块巧克力中白色的数量小于等于k个解析:突破口:n非常的小,我们枚举2^(n-1)个状态,这里枚举的是横切。然后再暴力枚举竖切#include<bits/stdc++.h>using namespace std;const int N...

2020-03-23 18:01:36 280

原创 Mooo Moo------------------------------------思维(完全背包变形)

解析:题目给出的是每个牧场音量的总和,所以我们要算出每个牧场实际发生的音量,记录发生最大的音量是多少。然后我们跑完全背包,物品数就是b头奶头的音量,体积就是最大音量。最后我们在累加每个实际音量需要奶牛的最小数#include<bits/stdc++.h>using namespace std;const int N=1e6+10;int f[N];int a[N]...

2020-03-23 13:04:05 195

原创 问题 B: 会议------------------------------思维(树的重心+dfs/bfs+套路题)

题目描述有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1。现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地点设置在哪个村民的家中,并且这个距离总和最小是多少?若有多个节点都满足条件,则选择节点编号最小的那个点。输入第一行。一个数n,表示有n个村民。接下来n-1行,每行两个数字a和b,表示村民a的家和...

2020-03-22 23:56:39 215

原创 问题 L: Crested Ibis vs Monster--------------------------------------------思维(完全背包)

题目描述Ibis is fighting with a monster.The health of the monster is H.Ibis can cast N kinds of spells. Casting the i-th spell decreases the monster’s health by Ai, at the cost of Bi Magic Points.The ...

2020-03-22 23:11:02 174

原创 膜法记录-------------------------思维(二进制)

解析:基本的贪心思路是先把能消灭一整行的次数用完,使得剩下的列尽量少,然后看看看剩下的列有多少个,和b比较一下大小。n的范围很小,我们枚举2n种状态,看可以消掉a行,剩下来的判断是否满足消掉b列#include<bits/stdc++.h>using namespace std;const int N=100,M=100005;char s[N][M];int t,...

2020-03-22 10:05:41 228

原创 奇怪的背包问题增加了------------------------------思维

解析:如果累加起来之和<230 那么一定是不能装满的如果累加起来之和>=230 那么一定可以装满的。我们从大到小排序物品的容量,然后计算。因为每件物品都是2的幂次,所以一定可以恰好装满2^30#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<ll,...

2020-03-22 00:23:03 148

原创 树上求和------------------------------------思维

解析:统计每条边在答案中出现的次数然后从小到大排序,贪心依次乘上n-1,n-2,n-3,…1#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e6+1000; vector<int> G[N];int n,a,b;int idx;ll cnt[...

2020-03-21 23:03:59 365

原创 D2. Prefix-Suffix Palindrome (Hard version)-----------------------------------思维(马拉车)

题意:给定一个字符串s。求一个最长回文子串t=a+b (a是s的前缀,b是s的后缀)解析:首先遍历前后缀相同的一部分,如果没有剩余一段,那么整个串就是最长回文子串如果有剩余的一段为[l,r],就对[l,r]这段跑马拉车 求出这部分最大前缀回文或最大后缀回文即可 设为x最长回文子串就为: [0,l]+x+[r+1,n]#include<bits/stdc++.h>#...

2020-03-20 23:17:36 337

原创 回文串-----------------------------------马拉车

模板#include<bits/stdc++.h>using namespace std;const int N=1e5+1000;int p[N];char s[N];char str[N];int n,len;void get_str(){ int k=0; str[k++]='@'; for(int i=0;i<n;i++) { str[k...

2020-03-20 16:04:15 84

原创 躲藏----------------------------------------------------思维(dp)

解析:设f[i][j]:表示前i个字符,匹配了j位(1<=j<=4)状态转移方程:f[i][1]=(f[i-1][1]+(s[i] == ‘c’))%MOD;f[i][2]=(f[i-1][2]+(s[i] == ‘w’)*f[i-1][1])%MOD ;f[i][3]=(f[i-1][3]+(s[i] == ‘b’)*f[i-1][2])%MOD;f[i][4]=(...

2020-03-19 20:08:23 84

原创 Transfer Window-----------------------------思维(0/1背包)

解析:把现有得球员和市场得球员全部变成自己需要买的,那么你手上所持有得金钱就是原有的+现有球员转会价格然后裸得0/1背包#include<bits/stdc++.h>using namespace std;const int N=1e5+1000;int f[N];int w[N],v[N];int t,n,m,p;int main(){ scanf(...

2020-03-19 17:03:57 343

原创 psd面试---------------------------------思维(dp最长公共子序列求回文串)

解析:把串反过来,和原串跑最长公共子序列#include<bits/stdc++.h>using namespace std;const int N=1e5+1000;char a[N],b[N],c[N];int f[2000][2000];int main(){ while(~scanf("%s",(a+1))) { memset(f,0,sizeof ...

2020-03-19 16:36:49 82

原创 小G有一个大树------------------------------树形dp

解析:本题就是树的重心模板,只是需要多记录一个重心节点是谁#include<bits/stdc++.h>using namespace std;const int N=1e5+1000;vector<int> G[N];int f[N];//记录以u为根的节点个数 int n,a,b;int maxnode,maxsum=0x3f3f3f3f;//max...

2020-03-18 15:36:50 300

原创 TaoTao要吃鸡----------------------------------dp(0/1背包变形)

解析:1.h==0 是不能卡bug的,所以就是简单的0/1背包2.h!=0,我们要枚举(1~n)中的每个装备是因为卡bug放进去的,那么除去这个卡bug装备剩下的一定又是一个0/1背包,最大体积为m+h-1 。每枚举一件卡bug装备,就要跑一个0/1背包,还要初始化f数组。每次跑完0/1背包的最大值还要加上这个卡bug装备的威力值#include<bits/stdc++.h&...

2020-03-18 14:18:13 152

原创 D. Present----------------------------------思维(二进制位)

解析:假设答案的二进制位上为1,那就说明有奇数对(aj+ak)在此位置上产生贡献,因为偶数异或一定为0.对于高于该位置的1,对当前答案是不影响的所以可以模掉那么0<=aj<=2k+1-1 所以 0<=aj+ak<=2(k+2)-2那么对答案贡献的区间为[2k,2k+1-1]U[2k+1+2k,2(k+2)-1]我们枚举ak 那么区间就变为[2k-aj,2k...

2020-03-18 12:36:27 107

原创 B. Count Subrectangles--------------------------------思维

题意:给定一个a数组和b数组,a*b得一个矩阵,问矩阵中由1组成的面积为K的矩阵有多少个解析:对k我们分解因数 假设存在一个因子x,那么我们需要在a数组找连续个1>=x的次数,就要在b数组找连续个1 >=k/x的次数 (想不通可以画图看看)#include<bits/stdc++.h>using namespace std;const int N=4e5+...

2020-03-18 12:14:27 194 1

原创 C. Unusual Competitions-----------------------------思维(前缀差值)

题意:给定一个长度位n的字符串,仅有’('和‘’解析:#include<bits/stdc++.h>using namespace std;const int N=1e6+1000;int n;int res[N];char s[N];int main(){ cin>>n;cin>>(s+1); int l=0,r=0; for...

2020-03-18 12:02:33 234

原创 美丽的项链------------------------------思维(dp)

解析:f[i][j]表示:前i个宝珠,选了j颗的方案数我们枚举前i-1个宝珠,选了多少颗的方案数状态方程 f[i][j]+=f[i-1][j-k]k就是前i个宝珠 选了l[i]~r[i],那么前i-1个宝珠,一定选了j-k最后输出f[n][m]的方案数#include<bits/stdc++.h>using namespace std;const int N=30...

2020-03-17 22:03:38 90

组合数学.pdf

1.1 排列 (1)在没有其他条件的情况下,从 个不同元素中选取 个不同的元素的排列数为 ,当 > 时, =0 (2)在 个不同元素中选取 个元素的圆排列的个数为 1.2 组合 (1)在在没有其他条件的情况下,从 个不同元素中选取r个不同的元素的排列数为 , 当 > 时, =0

2019-11-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除