基础算法
离散化 STL 贪心 尺取等
_7许
%
展开
-
CodeForces - 1338A
Powered Addition题意:给一个序列,从时刻 x=1x = 1x=1 开始,每个时刻 x,我们可以从序列中选择一个子序列(不必须连续),该子序列中的每个值都加上 2x−12^{x-1}2x−1 ,当然子序列可以为空。我们需要得到一个升序的序列,问需要最少的时间是多少?思路:直接贪心使得每个 aia_iai 都等于序列 [a1,ai][a_1, a_i][a1,ai] 中的最大...原创 2020-04-25 09:17:15 · 183 阅读 · 0 评论 -
提升vector性能的几种方法 & 线性求容器中第k小
提升 vectorvectorvector 性能的几种方法:提前分配空间向 vectorvectorvector 插入元素时使用 emplace_back()emplace\_back()emplace_back() 而非 push_back()push\_back()push_back()在填充或者拷贝 vectorvectorvector 的时候,使用赋值,而非 insert()ins...原创 2020-04-06 15:35:30 · 342 阅读 · 0 评论 -
拉普兰德的愿望【切比雪夫距离+树状数组】
题目链接题意:给出n个点的坐标,求曼哈顿距离不小于d的点对数。我们将坐标①(x,y)(x,y)(x,y)变换为②(x+y,x−y)(x + y, x - y)(x+y,x−y),那么①的曼哈顿距离等于②的切比雪夫距离。切比雪夫距离dis=max(x2−x1,y2−y1)dis=max(x_2-x_1, y_2-y_1)dis=max(x2−x1,y2−y1)那么对于点 iii 来...原创 2020-03-30 23:01:16 · 199 阅读 · 0 评论 -
P3964 [TJOI2013]松鼠聚会【切比雪夫距离】
P3964 [TJOI2013]松鼠聚会题意:给出nnn个点(xi,yi)(x_i,y_i)(xi,yi),找到某个点,使得所有点到该点的切比雪夫距离和最小。一、A(x1,y1),B(x2,y2)A(x_1, y_1), B(x_2, y_2)A(x1,y1),B(x2,y2)三种距离:①欧几里得距离:(x2−x1)2+(y2−y1)2\sqrt{(x_2-x_1)^2 ...原创 2020-03-30 20:14:30 · 209 阅读 · 0 评论 -
求解逆序数
两行代码vector求逆序数(冒泡)冒泡排序是保证前面冒完的泡泡是有序的~,所以说,我们可以直接利用这一点,二分找到要插入的数值应该在哪个位置,那么原位置减去当前应该在的位置就是它的逆序数#include <iostream>#include <algorithm>#include <cstdio>#include <vector>usi...原创 2020-03-27 22:34:27 · 260 阅读 · 0 评论 -
计算1至n中数字x出现的次数
题目:计算1至n中数字x出现的次数直接炒栗子!如果x=[1,9]2059 5个位:205个10,205∗1+1205*1+1205∗1+1:[1,2050)+[2050, 2059] 个位9>5十位:20个100,20∗10+(9+1)20*10+(9+1)20∗10+(9+1):[1,2000)+[2000,2059] 十位5=5百位:2个1000,2∗1002*1002∗10...原创 2020-03-27 16:08:41 · 793 阅读 · 0 评论 -
P3908 数列之异或【连续异或O(1)做法】
P3908 数列之异或题意:输入n,输出数列{1, 2, 3, ... , n}异或的结果如何O(1)做?(1)、我们知道如果某个数n为奇数,那么n-1为偶数,并且n^(n-1)==1【不知道自己写一下就知道了,因为正整数是从0开始的】所以对于这道题来说,如果n为奇数,那么我们只需要数一下有多少个奇数即可如果n为偶数,那么就强制n=n-1为奇数,同上解决,最后再异或一个n+1...原创 2020-03-02 21:53:11 · 645 阅读 · 0 评论 -
C++_内联函数 带默认形参值的函数 重载函数 constexpr 取整 点灯
/*NO.1 内联函数(1)内联函数是在“编译时”将函数体嵌入在每一个调用处,相当于宏定义define(2)inline关键字只是表示一个要求,编译器并不承诺将inline修饰的函数作为内联(3)在现代编译器中,没有用inline修饰的函数也可能被编译为内联(4)内联函数应该是比较简单的函数,结构简单,语句少,频繁调用(5)带有递归调用或者循环的函数不能以内联方式处理*//*...原创 2020-03-16 21:20:53 · 290 阅读 · 0 评论 -
[CodeForces - 1000C] Covered Points Count【差分】
题意给n段区间的左右端点,问出现k次的点有几个,其中k = [1, n].思路就是一个差分嘛~但是因为区间范围过大,所以不可能暴力整个范围,所以我们如何来统计次数呢?对于区间端点,左端1,右断-1,按照端点升序排序。定义now为当前点的个数,初始化当然是1,遍历[1, cnt),次数为now的点的个数自然就是info[i].pos - info[i - 1].pos...原创 2020-02-29 18:10:45 · 160 阅读 · 0 评论 -
货物种类【差分】
货物种类题目描述某电商平台有n个仓库,编号从1到n。当购进某种货物的时候,商家会把货物分散的放在编号相邻的几个仓库中。我们暂时不考虑售出,你是否能知道,当所有货物购买完毕,存放货物种类最多的仓库编号为多少?思路:对于每一个仓库,都有<货物种类,对应数量>,对于这个对应数量我们采用差分!于是我们就可以枚举仓库,枚举每个仓库的货物种类。(不知道为什么理解也...原创 2020-02-25 21:18:47 · 620 阅读 · 0 评论 -
操作序列【STL模拟】
操作序列题目描述给出一个长度无限的数列,初始全部为零,有三种操作:增加操作:给下标为 t的数加 c。特别注意,如果在下标 [t−30,t+30] 内有不为零的数,增加操作无效。 削减操作:让数列中下标最小的不为零数变为零。 查询操作:查询数列中下标为 t的数字是多少。输入描述:第一行包含一个整数 N,1≤N≤10^6,表示操作总数。随后N 行,每行由两个数字或一个...原创 2020-02-23 22:11:32 · 188 阅读 · 0 评论 -
关于三目运算符在C和C++中的区别
在C中,三目运算符返回的是变量的值;在C++中,三目运算符返回的是变量本身。原创 2020-02-12 18:04:41 · 241 阅读 · 0 评论 -
【离散化】洛谷 P1097 统计数字
洛谷 P1097 统计数字离散化详解#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#include <algorithm>#include <limits>#includ...原创 2019-12-22 22:06:01 · 336 阅读 · 0 评论 -
Doors Breaking and Repairing(贪心)
You are policeman and you are playing a game with Slavik. The game is turn-based and each turn consists of two phases. During the first phase you make your move and during the second phase Slavik make...原创 2019-03-27 22:08:22 · 211 阅读 · 0 评论 -
Ants(POJ 1852)
题目大意:一个蚂蚁群在一个杆子上爬,爬到杆子的末端时就会掉落,如果两只蚂蚁碰面,那么两只蚂蚁会反向走,问所有蚂蚁掉落的最短时间和最长时间。我们已知杆子的长度和蚂蚁的数量和每只蚂蚁的位置(即其距离杆子左端的距离),未知的是蚂蚁的朝向。思路:每只蚂蚁都有两种朝向的可能,最短时间的话还是很简单的,就是距离哪个端点近,朝向哪边,这样的话也不会存在两只蚂蚁碰头的情况,那么这样的话最短时间就完了。再看最长...原创 2019-02-15 16:24:39 · 197 阅读 · 0 评论 -
Buildings(贪心)
Have you ever heard the story of Blue.Mary, the great civil engineer? Unlike Mr. Wolowitz, Dr. Blue.Mary has accomplished many great projects, one of which is the Guanghua Building. The public opini...原创 2019-02-08 20:13:24 · 824 阅读 · 0 评论 -
卡片游戏(贪心)
题目小明最近宅在家里无聊,于是他发明了一种有趣的游戏,游戏道具是N张叠在一起的卡片,每张卡片上都有一个数字,数字的范围是0~9,游戏规则如下: 首先取最上方的卡片放到桌子上,然后每次取最上方的卡片,放到桌子上已有卡片序列的最右边或者最左边。当N张卡片全部都放到桌子上后,桌子上的N张卡片构成了一个数。这个数不能有前导0,也就是说最左边的卡片上的数字不能是0。游戏的目标是使这个数最小。 现在...原创 2019-02-05 13:31:03 · 1142 阅读 · 0 评论 -
Ugly numbers
题目链接:https://vjudge.net/contest/276651#problem/U题目大意:就是质数因子只有2 3 5的数称为丑数,(规定1也是丑数),让我们找出来第1500个丑数。思路:就是用关联式容器set来处理。#include <iostream>#include <stdio.h>#include <algorithm>#in...原创 2019-01-26 16:55:30 · 948 阅读 · 0 评论 -
Repair the Wall(简单的贪心)
题目链接:https://vjudge.net/contest/279984#problem/E题目大意:就是有个1L的矩形缝隙,然后有n个1a[i]的小木块来填补空隙,这些小木块可以锯,问最少要用多少块小木块才能修补好缝隙。思路:就是贪心的选取长的木块,直到木块的长度大于等于L为止。#include <stdio.h>#include <algorithm>u...原创 2019-01-25 18:33:39 · 300 阅读 · 0 评论 -
Urbanization
题目链接:https://vjudge.net/contest/279984#problem/C题目大意:就是有n个数,然后要挑出来n1和n2个,然后呢让n1集合和n2集合的平均数最大,输出这两个平均数的和。就让n和数从大到小排序,然后贪心地先挑大的放到小的集合中。然后再挑放在大的集合中的。#include <iostream>#include <stdio.h>...原创 2019-01-25 18:26:46 · 246 阅读 · 0 评论 -
coins(贪心,需要转换一下求解思维)
题目链接:https://vjudge.net/contest/279984#problem/D题目大意:就是有个物品价值p,然后我们有面值为1,5,10,50,100的纸币,问最少和最多用多少纸币正好能买这个物品。思路:最少的话就是从最大的开始看嘛,挺简单的。最多的话就转换一下求法。假设拥有的纸币的总面值为q,那么问题就可以转换成求买价值为q-p的物品,最少要用多少纸币,就很简单了。还有一...原创 2019-01-25 18:19:48 · 337 阅读 · 0 评论 -
Pass-Muraille(贪心,做了好久……)
题目链接:https://vjudge.net/contest/279984#problem/G题目大意:就是说魔术师要穿墙表演,一次表演最多能穿k个墙。一共有n行墙在map上放置,下面n行是墙的第一块和最后一块砖的左上角的坐标。然后让我们判断最少去掉几堵墙能使魔术师从上往下任意挑选一列都能穿墙成功。思路:从当前超过k堵墙的列开始,到墙的末尾,最长的墙对整个墙的布局的影响最大。所以就拆这个所谓...原创 2019-01-25 18:11:52 · 326 阅读 · 0 评论 -
Graveyard Design(尺取)
题目链接:https://cn.vjudge.net/contest/279225#problem/K、题目大意:输入一个整数n,找到一个连续的序列使这个序列的每个元素的平方加起来等于n,输出满足条件的序列数,按元素的多少降序输出元素数和这些元素。思路:这道题开始的时候是每次都把这个序列的平方和加一遍,然后超时了。后来改,改成sum是在移动尺子的时候加right^ 2,或减left^ 2,这个...原创 2019-01-22 09:07:47 · 385 阅读 · 0 评论 -
POJ 2739 Sum of Consecutive Prime Numbers(尺取(用到了筛法求素数))
题目链接:https://cn.vjudge.net/contest/279225#problem/J题目大意:就是输入一个n,计算出连续素数相加等于n的序列有几个。首先就是用到了筛法求素数。筛法求素数的思想就是说一个序列中,当然大于等于2,假设都是素数,然后最小的数是素数,放到素数的框里,这个素数的倍数是合数,筛出去到合数的框里,完了之后又出现了新的最小数,然后这个最小数的倍数还是合数,……...原创 2019-01-21 16:39:24 · 208 阅读 · 0 评论 -
Bound Found(尺取-前缀和)
题目链接:https://cn.vjudge.net/contest/279225#problem/I题目大意:就是给n个有正有负的整数,然后给k个t,在n数列中找到连续的一个序列使得这个序列的和的绝对值最接近t,然后输出这个序列的和的绝对值和它的区间左右端点。思路:这是个尺取的问题,首先这是我第一道尺取题,不知道为什么第一道就不容易找单调出序列,不知道挂题的学长怎么想的,虽然当时讲了一小下这...原创 2019-01-21 11:33:13 · 1390 阅读 · 1 评论 -
补提交卡(贪心)
小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序。100天过去了,小Ho查看自己的提交记录发现有N天因为贪玩忘记提交了。于是小Ho软磨硬泡、强忍着小Hi鄙视的眼神从小Hi那里要来M张"补提交卡"。每张"补提交卡"都可以补回一天的提交,将原本没有提交程序的一天变成有提交程序的一天。小Ho想知道通过利用这M张补提交卡,可以使自己的"最长连续提交天数"最多变成多少天..原创 2019-01-19 18:35:51 · 330 阅读 · 0 评论 -
今年暑假不AC (又是一道简单的贪心)
题目链接:https://vjudge.net/contest/279984#problem/B#include &lt;stdio.h&gt;#include &lt;algorithm&gt;using namespace std;struct node{ int begin_,end_;} a[105];bool cmp(node x,node y){ ret...原创 2019-01-19 18:35:04 · 4404 阅读 · 0 评论 -
发工资咯:) (这个名字……嗯,一道简单的贪心)
题目链接:https://vjudge.net/contest/279984#problem/A#include &lt;stdio.h&gt;using namespace std;const int fix[6]={100,50,10,5,2,1};int a[105];int sum;int main(){ int n; while(~scanf("%d",&...原创 2019-01-19 18:26:49 · 1958 阅读 · 0 评论 -
函数指针
简单的函数指针举例真的很简单,没啥好说的。所以我为啥要写,嗯……这个问题真好,我也不知道我为啥要写,想写吧哈哈哈#include<stdio.h>using namespace std;int MAX(int a,int b){ return a>b?a:b;}int MIN(int a,int b){ return a<b?a:b;...原创 2019-01-14 10:05:35 · 104 阅读 · 3 评论 -
字符串copy
简单的字符串copy#include&amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;#include&amp;amp;amp;lt;string.h&amp;amp;amp;gt;using namespace std;void copy_string(char *from,char *to){ while(*from!='\0')//'0'的ascii码是0,所以这里可以改成while(*fr原创 2019-01-13 20:31:00 · 396 阅读 · 0 评论 -
二维数组指针
题目有一个班,3个学生,4门课程,计算总平均分数以及第n个学生的成绩。#include &lt;iostream&gt;using namespace std;void average(double *p,int n){ double *p_end; double sum=0,aver; p_end=p+n; for(;p&lt;p_end;p++)...原创 2019-01-13 19:16:28 · 329 阅读 · 0 评论 -
冒泡排序
冒泡排序冒泡排序(以从小到大排序为例)就是两两相邻的数比较,若前者大于后者则交换,目的就是将最大的数像泡泡一样慢慢升到最后去。然后继续将倒数第二大的数放在倒数第二的位置去,以此类推。...原创 2018-12-13 21:44:52 · 116 阅读 · 1 评论 -
选择排序
选择排序 选择排序(图片以从小到大排序为例)简单说就是先第一个数与它之后的数分别比较大小,如果前者比后者大则交换次序,目的就是把最小的那个数放在第一个位置上。然后第二个数再跟它之后的数比较大小,以此类推。...原创 2018-12-13 21:36:47 · 145 阅读 · 0 评论