自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Akahieveman的博客

黑发不知勤学早,白首方悔读书迟。

  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于顶层const和底层const

之前有段时间对于这个一直比较模糊不理解,网上很多对于这个底层和顶层const的理解都是针对指针做出解释,漏掉基本数据类型和引用的解释,最终发现自己也是马虎了,在C++ primer中有关于这个详细说明,不过我没重视忽视掉了,现在记个笔记加深印象。C++ Primer中原话是:“更一般的,顶层const可以表示任意的对象是常量,这一点对任何数据类型都适用,如算术类型,类,指针等。底层const则...

2018-11-20 11:53:58 717

原创 C++ Primer中关于auto的“设置一个为auto的引用,初始值中的顶层常量属性仍然保存。如果我们给初始值绑定一个引用,此时常量就不是顶层常量了”这句话的理解

设置一个为auto的引用,初始值中的顶层常量属性仍然保存。如果我们给初始值绑定一个引用,此时常量就不是顶层常量了const int a = 2;auto &b = a;被误导这句话有什么弦外之音,根本就没有。第一句话意思是强调a 的顶层const属性一直都在,后面将b 绑定到 a上后,b是没有a的这个常量属性,a的顶层常量属性还是都在滴。翻译确实有点难理解。总结出来就是...

2018-11-13 11:25:47 1215 5

原创 sscanf函数基本用法

用法1:从字符串中取数字。代码如下:#includeusing namespace std;int main(){ char s[]={"(11,LL)"}; int v; sscanf(&s[1],"%d",&v); cout<<v<<endl;}运行结果:

2016-09-05 21:27:48 475

原创 取字符串某个特定字符后的字符串 strchr函数

strchr函数返回指定字符串中从左到右第一个指定字符的指针,未找到则返回NULL。函数原型:extern char *strchr(char *str,char character)例如:字符串s为(11,LL),strchr(s,',')+1所对应的字符串是‘LL)',strchr(s,',')对应的字符串是',LL)'。程序代码:#includeusing namespac

2016-09-05 21:20:57 3026

原创 随机数发生器 rand()函数使用方法

给出完整程序代码以供参考:#includeusing namespace std;typedef long long LL;#define INF 0x3f3f3f3f#define FOR(n) for(int i=0;i<(n);i++)#define PI acos((double)-1.0)void fi(vector&v,int cnt){ v.clear();

2016-09-04 21:41:42 1831

原创 计算几何凸包的算法 Andrew和Melkman算法

先介绍下二者的时间复杂度:Andrew算法是葛立恒扫描法的变种,但是更快,时间O(nlogn)。Melkman算法是采用双端队列,时间O(n)。第一种是经典算法,第二种则是在解决时间要求高的问题上的一个也是目前我所知道最快的。Andrew代码如下:int Andrew(Point *p,int n,Point *q){ sort(p,p+n); int m=0;

2016-09-02 23:04:16 4790

原创 Codeforces Round #210 (Div. 2)

本不想写,毕竟就打了一个小时(训练题变成个人赛了T_T),但是第一次水题4分钟搞定,手速一点没涨,纯粹就是脑子快^_^。A. Levko and Table题意:输入n和k,要求输出n行n列的矩阵满足每行每列的数和等于k。代码如下:#includeusing namespace std;typedef long long LL;#define INF 0x3f3f3f3f

2016-09-02 16:09:47 365

原创 关于计算几何某些定理·基础知识的汇总

欧拉定理:设平面图的顶点数,边数和面数分别为V,E和F,则V+F-E=2。直线方程两点式转换为一般式:  1.两点式:(y-y2)/(y1-y2)=(x-x2)/(x1-x2);  2.一般式:A*x+B*y+C=0;  A=y2-y1;  B=x1-x2; C=y1*x2-y2*x1;对踵点对:在凸包上的两个点将凸包完全夹在中间的点。

2016-09-02 14:55:50 384

原创 计算几何模板

初始定义:(基本都要用到,做题直接全打上)struct Point{ double x,y; Point(double x=0,double y=0):x(x),y(y){} //构造函数,以后直接用Point(x,y)就表示点};struct Polygon{ double x,y;};typedef Point Vector;Vector operator + (

2016-09-02 14:43:49 573

原创 UVa 11168 Airport

这个月看看计算几何,这道题写的代码出现的问题还是挺多的,不过索性最后解决了。题意:给出平面上n个点,找一条直线,使得所有点在直线的同侧(也可以在直线上),且到直线上的距离之和尽量小。思路:计算几何凸包求出包含所有点的多边形,那么所求直线即多边形其中一条边,这里涉及一个优化除该边之外所有点到边的距离,因为所有点在直线一侧,求出所有点的x坐标之和还有y坐标之和,用一般式解决,算法时间O(1),

2016-09-02 11:28:43 576

原创 Codeforces Round #368 (Div. 2) A C

大清早发现自己的rating涨了72分还是很高兴的,毕竟之前都是在掉分,还差9分才能到宝蓝啊,果然还是小菜鸡。A Brain's Photos大水题,要不是这个codeforces是外网太卡,提交等个半天,我想还是可以更快的题意:一个n行m列的字符矩阵,由C,M,Y,W,G,B六个字符构成,当出现C,M,Y中的任何一种或多种时输出color,当只由W,G,B这三种的一种或者多种组成时,

2016-08-21 08:08:32 336

原创 UESTC 1170 红蓝点对

UESTC 1170是个变异的最近点对题目,用分治策略和计算几何做的话好像会超因为时间上是1000ms,下面这个贪心做法是看了别人的博客知道的。处理红点到原点的距离然后根据距离排序,蓝点一样,然后二分查找最后处理最近的+-100的点,至于为什么是100应该是和计算几何做法中讲的最近点的区域有关,这个我也不是很理解就不做讲述。代码如下:#include#include#inclu

2016-08-11 23:21:22 611

原创 寻找最近点对

显然,寻找最近点对最原始的算法是计算所有的点对的距离来找出最近点对。这种算法依赖n的值,n的值越大运行时间越长。为了提高时效,可应用分治算法解决。算法每次递归调用的输入为点的自集P和数组Y。P中的所有点按其Y坐标单调递增的顺序排列,其编号序列存入数组Y。X坐标同样排列存入。1.划分找出一条垂直平分线,将点集P划分为点数为P/2或者[P/2]和[P/2]+1的两个点集P1和P2。数组Y被

2016-08-11 23:03:49 1734

原创 2016 Team Training #21 Gym 100952 A D E F J

A 水题题意:两个人的时间分别是时,分,秒输入,也就是让我们输出谁时间最早呗。思路:没有思路直接上,看手速了(我敲代码速度慢-_-!!!)。代码如下:#includeusing namespace std;typedef long long LL;#define INF 0x3f3f3f3fint main(){ int t,h1,m1,s1,h2,m2,s2;

2016-08-10 23:13:45 603

原创 2016 Personal Training #4 Div.2 A B C G H

A URAL 2091题意:有四个类别1.A和B都包含,2.只包含A不包含B,3.只包含B不包含A,4.A和B都不包含,A,B是课程,然后n行m列数字只包含1和0,1表示包含0表示不包含,求这n行这四类那种情况最多,并输出哪两种课程应该被选择,选择条件是A,B满足在n行中这四种都出现。思路:直接遍历查找所有情况然后记录最大值输出即可。代码如下:#includeusing name

2016-08-08 23:06:10 923

原创 2016 Personal Training #11 Div.2 B G J

UVALive 5963题意:给你n个数,如果这n个数满足:例如n=4第一个数前面有0个数后面有三个数那么这第一个位置数可以为0或者3,第二个位置可以为1或2等等。给出的n个数满足则输出yes否则no思路:将所有的数转换为前一半n/2的数,然后遍历数看看是否都出现两次,当然还有奇偶判断毕竟中间那个数可能只有一个。代码如下:#includeusing namespace std;

2016-08-08 10:51:49 485

原创 Codeforces Round #366 (Div. 2) A和B

昨晚打了一个小时CF感悟最大的就是英文真是菜的抠脚,第二题看了半天再结合样例解释才知道是什么意思,第一题第一次提交代码输出漏写个单词真是醉了,两题都掉分果真CF。A.Hulk题意:如果是1就输出I hate it,如果是2就输出I hate that I love it,如果是3就输出I hate that I love that I hate it。后面数字按这个规律输出。代码如

2016-08-08 09:02:36 383

原创 Codeforces Round #201 (Div. 2) E - Number Transformation II

题意:给你一个数组xi和两个数a和b,求通过两个途径由a到b的最小次数,1.当前的a减去1,2.当前的a减去a%xi。思路:首先考虑xi有重复元素,所以去重,然后当a-a%x[i]小于b时那么无论怎么变化a-a%x[i]也必定小于b,所以x的个数是逐渐变少的,那么知道这两个之后用贪心的方法找是1途径还是2,最后直到a==b。代码如下:#include#include#include

2016-08-07 20:55:02 349

原创 Gym 101028J 100541D

Gym 100499I这题当理解题意的时候就出现一个难题,循环小数怎么转化为分数,果断百度下。普及知识:1,纯循环小数:小数点后有几位数,分母就有几个9,分子为一个循环节.如:0.345(345循环)=345/999 该化简就化简即可.2,混循环小数:小数点后到第一个循环减去非循环小数部分作为分子,循环节内有几位数,分母就有几个9,然后接着写几个0,0的个数为第一个循环节前面非循环小数

2016-08-07 08:14:18 627

原创 UVALive 7285

这题开始一直理解错了,比赛结束才知道。题意:给你一个字符阵由'.'和'T'构成,意思是要你找到有多少圈的T,即最外层的T输出时为1然后里面一层为2....,当最大层的圈数大于等于10时每个原来的一个字符输出三个字符由'.'和圈数构成,当原来是'.'时输出三个'.',当最大圈数为小于10时,每个输出2个字符。思路:开始想到的是遍历一边遇到一个T就开始找他的上下左右看看和他连在一起的T最少是多

2016-08-07 07:52:16 383

原创 2016 Personal Training #3 Div.2 SGU 409

题意:给你两个数n和m然后输出一个长和宽都是n*n字符矩阵,要求:1.每行都必须出现m个*。2.每列都必须出现m个*。3.每个n*n的小矩阵中必须有m个*。思路:尝试模拟下另外找到分布的规律。代码如下:#include#include#includeusing namespace std;typedef long long LL;#define INF 0x3f3f3f3f

2016-08-07 07:32:04 405

原创 2016 Personal Training #8 Div.2 I - Lucky Numbers CodeForces 95B

CodeForces 95B经过11遍的WA和TLE终于迈向胜利T_T,题不难但是要考虑很多细节,这种题也是接触太少以前都是嫌麻烦就放弃了,所以借这题也是有不少收获,在此告诫千万别放弃坚持就是胜利!题意:幸运数是只由4和7组成,超级幸运数是这个幸运数的4和7一样多,给你一个数求最小但比给的数大的超级幸运数,我就只提供几组样例供大家参考测试吧:a.74777477 b.678678 c.

2016-08-04 10:12:14 892

原创 LCA入门学习

关于LCA博主也正在学习中会持续更新博客。另外如果有兴趣学习LCA的可以先行参考资料点击下面连接即可Tarjan求LCA学习资料:LCA学习下面附上STL的模板(仅限参考,具体与相关题改变):#include#include#include#includeusing namespace std;typedef long long LL;#define INF 0

2016-08-03 23:45:16 507

原创 POJ 1330 Nearest Common Ancestors LCA

POJ 1330可以说是经典的LCA求最近公共祖先的模板题,先入门感受下LCA,还有poj运行STL会WA,所以建议使用静态连接的邻接表做,还有codeforces的#include头文件也不支持。代码如下:#include#include#include#includeusing namespace std;typedef long long LL;#define INF

2016-08-03 23:36:37 473

原创 Codeforces Round #205 (Div. 2) CodeForces 353B Two Heaps

CodeForces 353B这题题意多次理解错误,卡了很长时间,最后看别人解析才意识到,另外codeforces上的题解没懂什么意思,但不妨碍做这道题。题意:给你两堆数,输入初始状态前n个数为1堆后n个为2堆,题目要求将这些数交换堆使得产生不同的四位数数最多,每个堆里可以取个数和另一个堆的一个数凑在一起表示四位数。思路:理解题意后,其实这个不同数的个数相对好求,就是输出可能比较坑,考

2016-08-03 23:28:17 721

原创 2016 Personal Training #9 Div.2

啊~,对于这套题我最想说的是我H居然没过,看来当时真的是比较累(虽然没做多长时间就去吃饭了-_-!!),赛后睡一觉再看题不到20分钟AC了,脑窝疼T_T。晚上补题不顺,B是矩阵快速幂明天在更新。 Gym 100735D题意:给你n个木棍问最多能组成多少个三角形,木棍最多只能组一个三角形。思路:排序,从小到大遍历三条边三个循环,注意判断木棍使用就行。代码如下:#include

2016-08-01 19:45:22 416

原创 Codeforces Round #209 (Div. 2) C - Prime Number

CodeForces 359C题意:给你序列ai,和x,求 的分子分母的最大公约数。思路:化简公式得分母s=xa1 + a2 + ... + an,那么每个分子的表示即为x(s-ai),那么求最大公约数,即分子的表现形式即为(x^k)*m,且m不能被x整除,假设分子最小的是x^p那么如果有x的倍数的这个分子,那么约掉的就不只是x^p了,我门就这样逐步找知道最小的x的次方个数不被x整除,

2016-08-01 10:21:13 446

原创 2016 Personal Training #8 Div.2 A B H

A - Combination Lock题意:给你四个数,n,T1,T2,T3,锁是从0~n-1,当你选择一个起始点时如果是T1那么只要顺时针转两圈即可,如果不是T1那么顺时针转两圈后再顺时针转到T1,接着第二步逆时针转一圈,然后再逆时针转到T2,最后顺时针转到T3,求当你选择0~n-1所有点为起始点的平均转动步数,一圈是n步。思路:明白题意就相当简单了,当然注意T2显示的位置可能会在T1

2016-08-01 07:47:55 494

原创 BestCoder Round #85 1001 1002

这次比赛点背啊,真是遗憾又只拿了一题,可悲的是第一题跪了,当时脑子热了下,还有被bestcoder的Accepect给骗了,就没在意T_T。1001题意:给你个序列和一个m判断是否存在连续子序列和是m的倍数。思路:从开始加到最后当和对m取余时出现重复说明可以组成,否则NO。代码如下:#include#include#includeusing namespace std;ty

2016-07-30 23:57:43 379

原创 CodeForces 468A

这题本来不想说但是我被骗的这么惨还是得说下。题意:给出一个数n,然后用1~n这n个数通过加,减,乘得到24.思路:给出这些时,我被他人误解了题意,自己也理解错了部分题意,并不是加减乘全用上,当你计算出一个数时下次可以用这个数。代码如下:#include#include#include#includeusing namespace std;typedef long long

2016-07-30 23:45:33 279

原创 CodeForces 631C

这题说起来还是得把握题目隐含的提示找出解题思路。题意:给出一个长度为n的序列下面会有m个操作,每个操作有两个数t,r,当t等与1时将序列前r个数升序排列,当t为2时将序列前r个数降序排列,最后输出最后的序列。思路:需要注意到的是这m个操作中最大r前面的所有操作全部失效,通过这个规律可以找最大r然后填数。代码如下:#includeusing namespace std;typed

2016-07-30 23:38:04 444

原创 CodeForces 589B Layer Cake

当时做的时候没做出来,后来才知道挺简单的,只是之前欠缺点思维。题意:给你n层蛋糕的长和宽,他们的高统一为1,求怎样按照某层蛋糕的宽和某层的长,使得切出的蛋糕体积最大。思路:做的时候如果简单想用暴力三重循环肯定超时,那么就需要优化,考虑可不可以用两层循环做,怎么做呢?先处理将蛋糕长都比宽大,按长升序排序下,这样便可以理解下面代码为何第一层循环遍历长时将宽排序而且为什么只排序当前长i到n,因为

2016-07-30 23:15:31 340

原创 Codeforces Round #207 (Div. 2) C - Knight Tournament

这题有三种做法,通常做法是线段树,当你熟悉STL可以用set做,但有更牛的优化做法,在空间上完虐前两种。题意:输入n和m,代表n个骑士和m场对决,每个骑士的编号从1~n,每个对决会给出l,r,x表示从l到r这区间的所有人参加这场对决,胜者为x,输的人输出第一次败给哪个骑士编号,最后只有一个胜者胜者输出0.思路:正如之前所说,直接用线段树更新区间,然后询问即可。代码如下:#inclu

2016-07-29 23:08:12 316

原创 2016 Personal Training #7 Div.2 CodeForces 589A Email Aliases

这题涉及面有点广啊,做之前建议先了解map和vector这些STL知识,字符串了解下strcpy和strcmp函数知识,c++中string输出记得用c++ cout输出。题意:输入个数n然后输入n行字符串,所有这些字符串大小写不区分,这些字符串类似于平时用的邮箱地址格式login@domain 有个特殊的格式@bmail.com 这个字符@前的'.'字符相当于没有,@前的'+'字符后面的所有

2016-07-28 22:58:30 472

原创 2016 Personal Training #6 Div.2 G

题意:让我们模拟医院救治病人的过程,每次会有不同病重程度的病人来医院,每次医院会选择程度最高的来救治,当输入第一个字符为P 后面跟着数字表示t0,s(t0),r;当字符为A时表示医院要选择一名病人救治后面跟着的数字表示时间t,病重随时间变化而变化满足方程s(t)=s(t0)+r*(t-t0)。思路:想解决得先学会优先队列的使用,优先队列存储优先级高的在头低的在尾,注意可能会有r相同的病人,所以

2016-07-27 23:44:50 548

原创 最短路算法 Dijkstra Bellman-Ford SPFA

Dijkstra算法求单源最短路径 特点:以起点为中心向外层层扩展,直到扩展到终点为止。算法伪代码:清除所有点的标号设d[0]=0;其他d[i]=INF循环n次{      在所有未标号结点中,选出d值最小的结点x     给结点x标记     对于从x出发的所有边(x,y),更新d[y]=min(d[y],d[x]+w(x,y))}

2016-07-27 23:16:13 378

原创 CodeForces 669D

诶,没想到这题是D题,不错不错,我居然做出来了。题意:给你n对男女围成一个圈然后有q个询问,询问有两种当第一个数为1是后面一个数为x代表所有男生移动x步,而如果第一个数为2代表第一个女生对应的男生和第二个女生对应的男生互换位置,后面所有都一样互换,即奇偶互换,注意女生一直不动,最后输出所有男生改变后的位置。思路:开始的时候没注意女生一直不动理解错了题后来改正后发现这题还是比较easy的,首

2016-07-27 00:31:03 507

原创 2016 Personal Training #5 Div.2 Gym 100637J

C - 寅Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64uSubmit StatusDescriptionstandard input/output StatementsOn the most perfect of all planets i

2016-07-27 00:18:26 908

原创 Codeforces Round #209 (Div. 2) D - Pair of Numbers

题意:给你一个长度为n的数列ai,然后找出最大的r-l,r代表右下标,l代表左下标,条件是l思路:遍历,使用left和right定位左右区间大小。代码如下:#includeusing namespace std;typedef long long LL;#define INF 0x3f3f3f3fint a[300005],b[300005];int main(){ i

2016-07-25 23:00:54 313

原创 SPOJ AMR11J

题意:输入数字t表示t组数据,然后每组输入n和m表示n行字符串长度为m,字符由小写英文字符和'.'和'#'构成,每个英文字符代表一个初始点会向周围即上下左右扩散,每到一点如果是'.'则将这点改为该英文字符如果是#则不变,当两种英文字符同时到一点时,则将该位置字符变为'*',最后输出变动后的n行字符串。思路:当看到这题时不妨模拟下,我们会发觉我们总是保持一个循环即从一个字符开始然后让所有这种字符

2016-07-25 22:47:35 367

link.exe和masm.exe压缩包

不急的没有积分的去我的博客留言告诉我,免费提供。博客:Akachieveman 博客里有关于怎么创建一个环境使得可以直接在dos中直接写汇编。

2016-09-03

空空如也

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

TA关注的人

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