自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 P1502 窗口的星星题解(扫描线)

知识点:线段树+扫描线看了看这道题的x,y的数据范围,固定离散化。注意避坑,方框上的不算。题目的大致意思是给若干个点,然后给个方框求怎么框才能框柱尽可能多的星星。我们要使用扫描线的时候通常是求面积并与周长并的时候,这题一眼看既没有面积也没有周长,所以该怎么创造面积或周长(估计不是)呢?先想一下怎样才算是框住了一个星星呢?我们先从简单的方面来理解这个问题,单单就一个框和一个星星而言,如果我们想要让它弄到的星星尽可能多,应当处于顶点和边缘,如果是左下方的顶点,矩形左下方的顶点应该应该是位于(x—x+w

2022-04-25 11:12:58 261

原创 Cable master题解

#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int n,k;double line[10055];int cou(double num){(计算可以分割成的电缆数) int tot=0,i; for(i=1;i<=n;i++) tot+=line[i]/num; return tot;}int main(){ scanf("%d%d",&amp

2022-04-25 10:58:47 180

原创 Aggressive cows题解

#include<cstdio>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;int n,c;ll stall[100100];bool check(ll k){ int i; ll num=1,t=stall[1]; for(i=2;i<=n;i++)(不停地尝试,只要能放下这么多头牛,则返回True) if(stall[i]-t>

2022-04-25 10:58:05 103

原创 Best Cow Fences题解

#include<cstdio>#include<algorithm>using namespace std;int n,f;double num[100500],temp[100500];void ready(double k){(先减去平均值,然后求前缀和,这样的话可以将其和表达出来,后面的话可以减去得到区间和,减去平均值是为了后面操作方便,实际上也可以后面减去) int i; for(i=1;i<=n;i++){ num[i]-=k; num[i]+

2022-04-25 10:57:18 100

原创 Max Median题解

开始的解题思路:1.直接对区间进行二分(这个肯定不行,因为区间不单调且k不固定,这样的话,每找一次就要再排序一次,又要恢复状态,必然超时)2.二分查找中点值(本题的话left、right和mid必然为整数,这就减少了不少麻烦)障碍:什么是二分条件(用什么判断该中点值是小了还是大了)C题用过前缀和,所以的话现在我也想的是能不能用前缀和,上一题是如果找到一段区间和大于等于0,那么就说明当前的平均值依然有扩大的可能。但是这题的话找的是中位数,判断一个中位数在一段区间内是否存在,可以在一开始输入时利用桶排,

2022-04-25 10:56:27 194

原创 P1083 [NOIP2012 提高组] 借教室题解

思路:1.总结一下,这题的二分不好找,最后的出来了是二分订单数量,在此总结:能否二分,有一个界定标准:状态的决策过程或者序列是否满足单调性或者可以局部舍弃性,而这题不难看出,当前订单满足则前面的订单也必然满足。2. 差分:(其实就是两两之差)一维数组差分我们给定一个数组a[2,4 ,6 ,8 ,10],则它的差分数组b[2,2,2,2,2,2]假设我们让数组区间[2,4]元素都增加1则数组a[2,5,7,9,10]差分数组b[2,3,2,2,1]我们可以发现规律,对于差分数组b,对于任意区

2022-04-25 10:54:24 145

原创 Arithmetic Progression 题解(随机数使用)

思路:本题的意思:求首项与公差。第一部分:观察一下,题目的第二类操作(比某数大,有单调性)明显是要我们用二分(或者我觉得其实随机数也行,根据随机数来不断缩小范围,但是这题练二分)求最大值,大概要操作Log2 1e9= 29.897353约30次。float f1=3e2;//3*(10^2);f1结果为300;float f1 =3e-2;//3*(0.1^2);f2结果为0.03;第二部分:求公差,由于一开始已经有n,有了公差和最大值就有了首项,这时就要用到第一个操作。对于任意三个数,我们

2022-04-25 10:51:53 225

原创 P1032 [NOIP2002 提高组] 字串变换题解(迭代优先搜索+剪枝+记忆化搜索)

思路:子串变换,本题打算先用迭代加深搜索来做,然后的话加上一个map判重剪枝。(这题重点是练一下字符串函数,很少做字符串的搜索题)string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos,也就是-1。(map用过)#includeusing namespace std;int main(){string str1=“She study really hard!”;str1=str1.replace(str1.begin(),str1.b

2022-04-25 10:50:00 235

原创 P1032 [NOIP2002 提高组] 字串变换题解(双向BFS+记忆化搜索+剪枝)

本题用迭代优先搜索的方法实现了一次。但是的话,相比较而言,双向BFS的方法会更好一些,因为其自带层数,方便判断,向外延伸扩展时也可以用map判重。这题读来是一道标准的双向BFS模板题,有初末状态,当两边搜索到相交的状态的时候,两者路径之和即为当前路径下的步数。实现过程中的难点:1.如何实现双向:弄两个队列,两个转换函数,分别对其进行转化,塞进队列中#include<cstring>#include<cstdio>#include<iostream>#incl

2022-04-25 10:49:09 167

原创 P1949 [NOI2001] 聪明的打字员题解(哈希+剪枝+BFS+大模拟)

知识点: BFS+字符串hash+模拟笔记:6个变换态分别写在bfs中,用广度优先搜索从第一个光标开始搜起,用map标记多少步数到达该字符串,找到更新最大值即可,用了这思路,超时超的妈都不认识。(结果正确,18分)所以这题果断舍弃map(看来以后要少用,两次教训),用一个6维数组标记密码(这里引入一个函数stoi,将字符串转变成数字,头文件为cstring),以空间换时间(六位不会炸),另外写一个函数给六维数组赋个值,然后的话另外弄一个二维数组,第一个空放6维数组,第二个空放下标,以此来标记状态,但

2022-04-25 10:32:26 951

原创 HDU - 1754 I Hate It 题解(区间查询+单点修改)

知识点:线段树(单点修改+区间查询+简单最值)#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int num[200500],tr[900500];int n,m;char c;void bud_tr(int r,int lf,int rg){ if(lf==rg){ tr[r]=num[lf]; return ; } int lf_r=2*r;

2022-04-25 10:25:44 122

原创 [HDU-1698] Just a Hook题解(区间覆盖+区间查询)

知识点:线段树(区间覆盖+区间查询)#include<cstdio>using namespace std;typedef long long ll;struct tree{ int data; int tag;}tr[800600];ll n,q,cas;void bud_tr(ll r,ll lf,ll rg){ tr[r].tag=0; if(lf==rg){ tr[r].data=1;(全部赋值为1) return ; } ll lf_r=2*r;

2022-04-25 10:23:07 206

原创 HDU4027 Can you answer these queries题解

知识点:线段树(区间查询+区间修改)这道题不同于以往的增减或乘除,增减乘除都是有结合律的,但是开根号是木有的(可能是我孤陋寡闻),所以只能单点修改,但是的话它又是有一定规律的,所以可以类似剪枝般省去一些步骤。说明一下,这题并不难,但是非常非常坑qwd,坑点画红在下面#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;type

2022-04-25 10:18:55 116

原创 POJ - 2528 Mayor‘s posters题解 (线段树染色+离散化处理)

知识点:线段树(区间染色)思路:这个墙的长度很大,长达10000000,并且每组数据不会预先告诉你海报最远会铺到哪里,这样的话如果从头到尾整个墙进行建树等操作浪费的时间与空间都很大可以对点进行离散化———————————————————————————————————————什么是离散化离散化,就是把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。什么时候用当所给数据我们只需表示出它们之间的相对大小关系,

2022-04-25 10:12:06 99

原创 HDU - 1542 Atlantis(扫描线)题解

知识点:线段树+扫描线(这道题是扫描线的模板题)这道题如果用模拟实现会十分麻烦并且必然会爆(0<=x1<x2<=100000;0<=y1<y2<=100000)所以学点新知识吧QAQ不错的文章:扫描线入门理解从左到右进行遍历,然后的话以y的长度作为当前数组某点,某点的序号是x。需要计算的总面积可以拆分成图中阴影部分的面积之和, 这样如果从小往大枚举x的取值, 必然每两个x1与x2之间会有一个小矩形, 我们只需要把这些小矩形的面积加起来即可。同时,我们也可以从

2022-04-25 10:07:43 133

空空如也

空空如也

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

TA关注的人

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