05 2020 档案
摘要:传送门 题解: 核心就是满足条件,i<j and a[i]!=a[j] and b[i]<b[j] ; 另外有个附加属性,有一些发功的时间 i 第i秒会给在第i秒及以前出现的b[i]+1, 用一个sum[i]数组表示在此时间受到发功影响的次数的总和。那么问题就是变为 在i<j的条件下,b[i]+su
阅读全文
摘要:传送门 给定范围,给一些区间,这些区间树被清理掉,问最后剩多少种树。 方法一,预处理标记该点已不存在树。 #include<bits/stdc++.h> using namespace std; const int maxn=1e5; int vis[maxn]; int main(){ int l
阅读全文
摘要:传送门 和二分没有半毛钱关系,题目大意有点不好描述。 题解:数的范围在int范围,而且有负数,不能用数组,用map存储,前缀和代表有多少个最多有多少种满足描述,取最大的前缀和。 找重叠区间最多的个数。输出.时,a点加一。输出-时,负无穷到a-1加一。输出+时,a+1到正无穷加一。 #include<
阅读全文
摘要:比较x^y和y^x的大小,范围1e9。 可以用两边分别取对数,lnx^y=y*lnx,lny^x=x*lny; 用系统带的log函数即可。 #include<bits/stdc++.h> using namespace std; int main(){ long long int x,y,a,b;
阅读全文
摘要:问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修。市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他。 C市中有n个比较重要的地点,市长希望这些地点重点被考虑。现在可以修一些道路来连接其中的一些地点,每条道路可以连接其中的两个地点。另外由于C市有一条河从中穿过,也
阅读全文
摘要:问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。 其中,A的子矩阵指在A中行和列均连续的一块。 输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。 接下来n行,每行m个整数,表示矩阵A。 输出格式 输出一行,包含一个整数,表示A中最大的子矩
阅读全文
摘要:问题描述 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当所有蚂蚁都爬离杆子时,有多
阅读全文
摘要:传送门 题目大意:几个小朋友围成圈,给i-1个到i小朋友的距离,求离得两个小朋友最远的距离。 题解:直接枚举,o(n^2)范围是1e5超时,考虑尺取或者三分。 分析可知,第i个小朋友到第j个小朋友距离大于j+1个小朋友时,第i+1个小朋友的最远距离要大于到第j个小朋友,由此缩小规模。 #includ
阅读全文
摘要:传送门 题目大意:每次有两种选择,第一种是得到金钱,消耗魔法值。第二种是得到魔法值,消耗金钱。金钱和魔法值不够消耗时也可以消耗,该值置为0。求金钱*魔法值的最大值。 题解:范围很小,直接dfs爆搜即可。 #include<bits/stdc++.h> using namespace std; con
阅读全文
摘要:传送门 题目大意:一张彩票3元,每次买都会中奖,金额为1、2、3、4元,概率相等,求买n次彩票时,至少不亏的概率。 题解:统计所有不亏的方案/所有方案,所有方案可以知道是4的n次方,问题主要在求不亏的方案,不亏即中奖的 金额在3n到4n的方案统计。用dp统计方案,dp[i][j]表示第i次购买,中奖
阅读全文
摘要:https://ac.nowcoder.com/acm/contest/5773/B 给一些点的横纵坐标,问最多有多少不平行的直线,其实就是问有多少种斜率。 可以用map,也可以用set map #include<bits/stdc++.h> using namespace std; const i
阅读全文
摘要:https://ac.nowcoder.com/acm/contest/5773/E 求使序列有序的最小交换次数。 找循环节的个数,最小交换次数等于元素个数减掉循环节的个数。 关于算法这里有个比较好的分析https://blog.csdn.net/lfb637/article/details/866
阅读全文
摘要:https://ac.nowcoder.com/acm/contest/5773/A 给一个数列,求第k小的数。 用桶排序,每次遇到一个数加1,从小到大扫一遍,每遇到数列里的数计数加一,等于k时输出。 #include<bits/stdc++.h> using namespace std; cons
阅读全文
摘要:问题描述 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿
阅读全文
摘要:题目大意,每一秒有三种选择,闪现,每次移动60m,消耗10点蓝。 跑步,每次移动17m,不耗蓝。 原地休息,回复4点蓝。 给初始蓝值,目标距离,和时间。问能达的最短时间和不能到达的最远距离。 题解:我们尽量都取闪现的方式,不够量就原地恢复,算出所能到达的最远距离。 再在每一秒比较此距离与上一秒选择跑
阅读全文
摘要:先贴个整数快速幂 #include<bits/stdc++.h> using namespace std; typedef long long int ll; ll b,p,k,ans=1,res; int main(){ scanf("%lld%lld%lld",&b,&p,&k); cout<<
阅读全文
摘要:转载自https://blog.csdn.net/sdz20172133/article/details/80101838 前提:一个非降序列!!!!!! lower_bound()函数使用: 它的参数就是: 1.一个数组元素的地址(或者数组名来表示这个数组的首地址,用来表示这个数组的开头比较的元素
阅读全文
摘要:问题描述 小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。 现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1,
阅读全文
摘要:问题描述 小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。 不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径
阅读全文
摘要:问题描述 n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。 如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度
阅读全文
摘要:水题。。有点像蓝桥交换蚂蚁那道题。 #include<bits/stdc++.h> using namespace std; const int maxn=5500; int l,n; struct node{ int pos; int minn; int maxx; }a[maxn]; int c
阅读全文
摘要:题意是两条路径一条左上角到右下角、一条从右下角到左上角,找权值最大的两条路径。每个点只能走一次。 问题转化为和P1004方格取数一样的情形,即两条不同的路径从左上角到右下角,并去掉重复加的点即可。 #include<bits/stdc++.h> using namespace std; const
阅读全文
摘要:经典dp问题,dp[i][j][k][l],i、j代表第一个人的位置,k、l代表第二个人的位置,则列出dp方程,dp[i][j][k][l]=max(dp[i-1][j][k][l-1],dp[i-1][j][k-1][l],dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]
阅读全文
摘要:无向图,检测有无环,可以用并查集 #include<bits/stdc++.h> using namespace std; const int maxn=1e4; vector<pair<int,int> >a(maxn); int parent[maxn]; int rank_[maxn]; in
阅读全文
摘要:还是板子。区间更新,树状数组结合差分。 #include<bits/stdc++.h> using namespace std; const int maxn=5*1e5+5; vector<int>a(maxn); vector<int>b(maxn); vector<int>v(maxn); i
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; const int maxn=5*1e5+5; int tree[maxn]; int n,m,op,a,k; int lowbit(int x){ return x&(-x); } void add(int
阅读全文
摘要:问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师
阅读全文
摘要:问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。 蚂蚁的头部朝向为:上下左右其中一方。 蚂蚁的移动规则十分简单: 若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格; 若蚂蚁在白格,左转90
阅读全文
摘要:https://www.luogu.com.cn/problem/P1144 #include<bits/stdc++.h> using namespace std; int n,m,A,B; int flag=0,ans=0x3f3f3f,vis[205]; int a[205]; void df
阅读全文
摘要:水题。输出的时候左对齐,宽度5,要用-5%d。 #include<bits/stdc++.h> using namespace std; int step[405][405]; int vis[405][405]; int n,m; struct node{ int x,y; node(int a,
阅读全文
摘要:djsl+优先队列求单源最短路。 #include<bits/stdc++.h> using namespace std; typedef long long int ll; const int maxn=5*1e5+5; vector<pair<ll,ll> >v[maxn]; ll dis[ma
阅读全文
摘要:https://www.luogu.com.cn/problem/P1113 给一些工作的消耗时间,和完成这些工作必须的准备工作。求完成的最少时间。 把数据建模,转化为dag,拓扑排序完事。(循环次数还是用for循环吧,用while把n减成0,debug了好久,哭了) #include<bits/s
阅读全文
摘要:一道裸的dag拓扑排序,vector模拟邻接表存出边和权值,dp数组更新最长路。 /* 展开 题目描述 设 G 为有 n 个顶点的带权有向无环图,G 中各顶点的编号为 1 到 n,请设计算法,计算图 GG 中 <1,n><1,n> 间的最长路径。 输入格式 输入的第一行有两个整数,分别代表图的点数
阅读全文
摘要:水题,图的dfs和bfs,小的优先,排下序,收获是知道vector的clear不能用来数组清零。标记数组还是用普通数组,memset清空比较妥当。 #include<bits/stdc++.h> using namespace std; int n,m,a,b; const int maxn=1e5
阅读全文
摘要:问题描述 考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。 输入格式 一个由x()|组成的正则表达式。输入长度不超过100,保证合
阅读全文
摘要:很好的题解链接,学到了懒标记和线段树的更容易写的版本。https://llkabs.blog.luogu.org/xian-duan-shu 本题主要解决区间修改,而不是单点修改。 ac代码如下 #include<bits/stdc++.h> using namespace std; typedef
阅读全文
摘要:https://www.luogu.com.cn/problem/P1434 在一个二维数组里面,找到一个依次递减的路线,求最大的那条长度 #include<iostream> #include<algorithm> #include<cstdio> #include<vector> #includ
阅读全文
摘要:https://www.luogu.com.cn/problem/P2196 给定每个点的地雷数目,再给定点能否直接到其他点的情况,求最大地雷的数目和其路径。典型dp题 如果j到i有边,有dp[i]=max(dp[i],dp[j]+a[i]); 路径存储有一个结构体,存储上一条边,最后逆序输出就好啦
阅读全文
摘要:题目是找生产者到最高级消费者的路线有几条。 其实是找入度为0的点到出度为0的路径方式有几种。 预处理入度和出度,拓扑排序,把出度为0的点的路线累加。 #include<iostream> #include<algorithm> #include<cstdio> #include<vector> #i
阅读全文
摘要:问题1.判断有没有环 http://hihocoder.com/problemset/problem/1174 用vector模拟邻接表,开一个记录入度的一维数组,一个存储入度为0的队列 ac代码如下 #include<iostream> #include<algorithm> #include<v
阅读全文
摘要:完全背包问题 二维:dp[i][j]=max(dp[i-1][j],dp[i][j-a[i].t]+a[i].value);//只考虑当前层的状态,所以第二层循环是正序。 一维:dp[j]=max(dp[j],dp[j-a[i].t]+a[i].value); #include<iostream>
阅读全文
摘要:给出几个好友、几瓶药水,和每个好友战斗输了得到的经验值、赢了的经验值、赢了需要消耗至少几瓶药水,求最后得到的最大经验值(结果*5,longlong) 输入:6 8 21 52 1 21 70 5 21 48 2 14 38 3 14 36 1 14 36 2输出:1060这题转化为01背包模型,每个
阅读全文
摘要:问题描述 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。 每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾
阅读全文
摘要:问题描述 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足: 1. 形状是正方形,边长是整数 2. 大小相同 例如
阅读全文
摘要:今天在B站学习了线段树,up主讲得很清晰。 引入:我们在一个数组中如果想更新一个数据的值,记为update,所用的时间复杂度是o(1),而求某一段区间的端点值之和,记为query,时间复杂度是o(n)。 求某一段区间的长度之和可以采用端点前缀和相减,建立一个前缀和数组,[l,r]的值等于sum[r]
阅读全文
摘要:问题描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。 X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。 *WWWBBB 其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。 X星的青蛙很有些癖好,
阅读全文
摘要:问题描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在
阅读全文
摘要:问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。 你能求出数列中总共有多少个K倍区间吗? 输入格式 第一行包含两个整数N和K。(1 <= N, K <= 1
阅读全文
摘要:问题描述 Excel单元格的地址表示很有趣,它使用字母来表示列号。 比如, A表示第1列, B表示第2列, Z表示第26列, AA表示第27列, AB表示第28列, BA表示第53列, .... 样例输入 26 样例输出 Z 样例输入 2054 样例输出 BZZ 数据规模和约定 我们约定,输入的整数
阅读全文
摘要:问题描述 3*3矩阵,1-9个数字每个数字只能使用一次,要求行列对角线的和都相等,如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出“Too Many”(不包含引号)。 样例输入 0 7 20 5 00 3 0 样例输出 6 7 21 5 98 3 4 思路 这个题目比较简单,基本的深搜,标记用
阅读全文