自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 list

list容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表。对于链表的迭代器只可以通过”++“或”--“的操作将迭代器移动到后继/前驱节点元素处。而不能进行+n或-n的操作。1.创建list对象 list l;//创建空链表 list l(10);//创建具有10个元素的空链表2.元素插入和遍历插入有三种方式①采用push_back()方法往尾部插

2017-11-30 21:13:04 304

原创 pair,tuple

c++中的结构模板,定义在头文件中,提供一个包含2个数据成员的结构体模板。通过first,second访问2个成员,有 operator= 和 swap 方法。简单模糊理解就是一个含有两个数据的结构体。#include using namespace std; int main() { pair p;//建立一个pair元素 p.first = 1;p.second

2017-11-30 18:40:02 336

原创 map, multimap和unordered_map, unordered_multimap

头文件为#includemap是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。map关联容器也是采用红黑树来实现的,插入元素的键值不允许重复,比较函数只针对元素的键值进行比较,元素的各项数据可以通过键值搜索出来,map里面

2017-11-30 18:27:23 1309

原创 UVA ~ 12124 ~ Assemble(map+二分)

题意:先给你一个数字T表示有T组数据,然后给你N,B,下面有N个配件,你有B元钱,下面N行表示N个物品,每个物品有四个属性:类型,名字,价格,质量,你要配出来一台尽可能好的computer,一台computer的好坏是由它质量最坏的配件决定的,要求每种类型的配件都至少有一个。思路:典型的最小值最大化的题目,所以我们直接二分这个答案就好了。难就难在输入数据的处理,这里我采取的方法是使用map把每

2017-11-30 14:24:22 373

原创 HDU ~ 2199 ~ Can you solve this equation?(二分+精度)

题意:给你一个Y,问有没有一个x且0思路:很容易看出函数在[0,100]是单调递增的,所以Y F(100)这两种情况无解,有解的时候二分找X就可以#include using namespace std; const double eps = 1e-8;double Y;double F(double x)//返回等号左边的值 { return 8.0*pow(x,4)

2017-11-30 08:18:10 246

原创 set, multiset 和 unordered_set, unordered_multiset

集合(Set)是一种包含已排序对象的关联容器。 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,它不会插入相同键值的元素,而采取忽略处理。平衡二叉树的检索使用中序遍历算法,检索效率高于vector、deque和list等容器。对于set容器中的键值,不可直接去修改!应该先删除该键值,再插入新

2017-11-29 21:01:49 1977

原创 UVA ~ 10341 ~ Solve It(二分+精度)

题意:给你一个公式,,除了x所有的未知数都给你,问有没有一个x且0思路:p, q, r, s, t and u (where 0 ≤ p, r ≤ 20 and −20 ≤ q, s, t ≤ 0)。根据p,r大于等于0,q, s, t 小于等于0且x属于[0,1]可以判断出前面这个式子是个单调递减的函数,所以我们可以可以通过二分求得一个满足要求的x,那么什么时候没答案呢,因为函数时单调的,所

2017-11-29 19:39:27 260

原创 UVA ~ 714 ~ Copying Books(二分+最大值最小化)

题意:给你K本书分给M个人抄,这M个人抄书的速度相同,每个人抄的书的编号必须连续,问怎么划分可以最快的抄完这M本书?思路:典型的最大值最小化的问题,

2017-11-28 18:02:14 407

原创 codeForces 672D.Robin Hood(思维+二分)

题意:给你一个N,K。表示又N个人,每个人有一定的钱数,每天最富有的人要给最穷的人给一块钱,问k天后最富有的人(最大值)跟最穷的人(最小值)的差值为多少?思路:因为时间越长(天数经过的越多),最大值就会越小,同理最小值就会越大,所以分别二分最富有的人的钱数(最大值),最穷的人的钱数(最小值),两个相减为答案,注意要用long long。#includeusing namespace st

2017-11-21 09:18:15 380

原创 codeForces 660C.Hard Process(二分+前缀和)

题意:先给你一个n,k,n表示下面会有n个数字,这些数字只有0和1,k表示你最多可以将k个0变为1。问变完后连续的最长的全是1的串的长度是多少,并且输出最后得串;思路:我们可以做一个有几个0的前缀和sum,然后枚举左端点二分查找含有k个0的序列的右端点,找到一个最长的序列就是答案。#includeusing namespace std;const int MAXN = 3e5 + 5;

2017-11-17 19:34:11 351

原创 codeForces 535C.Tavas and Karafs(二分+思维)

题意:给你一个首项为A,公差为B的等差数列,再给你一个N代表有N次询问,每次询问会有三个值L,T,M代表在经过T次操作之后以L为左端点的等于0的串最长能有多长。操作为每次使任意M个不为0的数字的值都减一。思路:首先我们应该明确一点,对于这个为零的区间[L,R]的区间和一定小于等于T*M。对于每次询问我们可以通过枚举右端点来找到答案,因为是无法避免的,如果再去枚举右端点R会超时,我们可以

2017-11-17 17:17:31 414

原创 codeForces 448D.Multiplication Table (二分+数学)

题意:给你三个数字N,M,K,给你个N*M的矩阵,对于[i][j]位置的值为i*j,问第K小的数字为多少?思路:因为第K小得数字一定小于K,我们可以枚举答案这个数字ans从1-K,然后对于每一个ans算出来小于等于的ans数字有多少个(这里不必用N方的,因为每一行是倍增的,所以对于第i行,ans/i就等于这一行小于ans的个数,这个个数不能比这一行数字的总数还多,也就是列数M,这两个值取较小的

2017-11-15 21:59:24 489

原创 codeForces 165C.Another Problem on Strings (二分+前缀和)

题意:给你一个整数K和一个只含01的字符串s,问你在这个字符串s中有多少个含有k个‘1’的子串。思路:k和字符串长度都为10^6,所以暴力枚举所有子串不行,我们可先求一个前缀和统计到当前位置有多少个1,这样我们每次只需要用O(1)的负责度就可以知道任意两个位置之间(也就是某个子串中)有多少个‘1’了,然后我们枚举子串起点i,然后对于每一个起点寻找sum[i] + k - (s[i] - '0'

2017-11-14 16:08:48 537

原创 51Nod ~ 1267 ~ 4个数和为0(二分or尺取)

思路:N的范围为1000,所以四重for循环枚举显然不行。所以我们可以先将两个不同数字相加的结果算出来,然后在枚举一个数字,在这个集合中寻找它的负数,可是我们这样复杂度依旧为n^2*n^2=n^4,我们就想到了二分查找,先对数组排序,枚举一个数二分查找他的负数,这样差不多就能过了。可是你在仔细想想这四个数字不能重叠,可能会出现A+B+B+C=0的情况,所以这样写是有BUG的,所以我们要对每两个数字

2017-11-13 17:50:10 627 3

原创 codeForces 165B.Burning Midnight Oil(二分)

题意:给你两个数字N,K。N表示有个人要写N行东西,K是跟他的写东西效率有关的额一个系数。这个人写东西写一会就累了就必须喝杯茶再写,他的效率会越来越低,V表示他第一天能写V行,然后依次能写等等,当这个值为零时他就睡着了。问你V最小为多少时,他才能写完这N行东西?思路:二分V,

2017-11-12 21:52:57 415

原创 ACdream ~ 1066 ~ Bet(数学 or 二分+精度)

思路:因为我们要使最坏的情况获得钱最多,肯定要让不管哪一个赢都能得到一样的钱average。在总钱数X一定的情况下,如果有某个赢之后获得的钱大于average,那么肯定有某个赢之后的钱少于average,如果是其他都输了而这个赢钱少的赢了那么得到的钱就比average少。题目中问的就是最坏情况下的最大收益(最大化平均值),所以我们应该让不管哪个赢获得钱都一样的钱v。那么怎么求average呢?有两

2017-11-10 17:29:19 476

原创 二分

二分思想:我们对于一个已经排好序的数组,查找某个值的位置(一般为从小到大排序,如为从大到小排序代码会有变动,以下代码均为从小到大排序的代码)                    首先最简单的思想肯定是一个for循环扫一遍数组,找到就跳出。因为这样效率太低了,所以就有了二分查找。假定我们查询的范围在a数组(假设a数组中的数值不重复),我们定义一个左端点为L,右端点为R,M为L,R中点,那么

2017-11-01 18:19:07 1440

空空如也

空空如也

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

TA关注的人

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