HDU5127 神坑题---vector 、 list 、 deque 的用法区别
题意:三个操作
1 a b : 队列中加入(x = a, y = b);
-1 a b : 队列中减去(x = a, y = b);
0 p q :从队列的数对中查询哪一对x,y能够让 p * x + q * y最大;
分析:因为一开始就觉得如果暴力绝对会超时,但是时限是30 000 ms,而且看见FB的又是8800ms过的,所以就暴力一次试试,但是TLE.
- #include <iostream>
- #include <cmath>
- #include <vector>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <string>
- #include <sstream>
- #include <algorithm>
- #define Max 2147483647
- #define INF -0x7fffffff
- #define N 910
- #define ll long long
- #define mem(a,b) memset(a,b,sizeof(a))
- #define repu(i, a, b) for(int i = (a); i < (b); i++)
- const double PI=-acos(-1.0);
- using namespace std;
- vector<pair<ll,ll> > v;
- int main()
- {
- ll a,b,c;
- int n;
- while(scanf("%d",&n) && n)
- {
- v.clear();
- repu(i,,n)
- {
- scanf("%I64d%I64d%I64d",&a,&b,&c);
- vector<pair<ll,ll> > ::iterator it;
- if(a == )
- v.push_back(pair<ll,ll>(b,c));
- else if(a == -)
- {
- pair<ll,ll> t = pair<ll,ll>(b,c);
- for(it = v.begin(); it!=v.end(); it++)
- {
- if(*it == t)
- {
- v.erase(it);
- break;
- }
- }
- }
- else
- {
- ll maxn = ;
- int flag = ;
- for(it = v.begin(); it!=v.end(); it++)
- {
- if(flag)
- maxn = it->first * b + it->second * c,flag = ;
- else
- maxn = max(it->first * b + it->second * c,maxn);
- }
- printf("%I64d\n",maxn);
- }
- }
- }
- return ;
- }
TLE代码
- #include <iostream>
- #include <cmath>
- #include <list>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <string>
- #include <sstream>
- #include <algorithm>
- #define Max 2147483647
- #define INF -0x7fffffff
- #define N 910
- #define ll long long
- #define mem(a,b) memset(a,b,sizeof(a))
- #define repu(i, a, b) for(int i = (a); i < (b); i++)
- const double PI=-acos(-1.0);
- #define pii pair<ll,ll>
- using namespace std;
- list<pii > v;
- int main()
- {
- ll a,b,c;
- int n;
- while(scanf("%d",&n) && n)
- {
- v.clear();
- ///list<pii> v 每次被定义一遍更费时间,还不如clear时间少
- repu(i,,n)
- {
- scanf("%I64d%I64d%I64d",&a,&b,&c);
- list<pii> ::iterator it;
- if(a == )
- v.push_front(pii(b,c));
- else if(a == -)
- {
- pii t = pii(b,c);
- for(it = v.begin(); it!=v.end(); it++)
- {
- if(*it == t)
- {
- v.erase(it);
- ///v.remove(*it);也会超时,题目卡的很严
- break;
- }
- }
- }
- else
- {
- ll maxn = ;
- int flag = ;
- for(it = v.begin(); it!=v.end(); it++)
- {
- if(flag)
- maxn = it->first * b + it->second * c,flag = ;
- else
- maxn = max(it->first * b + it->second * c,maxn);
- }
- printf("%I64d\n",maxn);
- }
- }
- }
- return ;
- }
AC代码
AC代码也是看了某个大神的代码仅仅用Ctrl+r把TLE代码中的vector改成了list,就A了,但是时间有点慢,我也是醉了;
其实就是vector和list的区别(http://w57w57w57.blog.163.com/blog/static/9607473520094751136967/):
具体细节看链接,只写用法:
在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则:
1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。
而这个题目,即使用vector也并不是随即随取,也得是从头到尾遍历,因此插入和删除的时间复杂度更重要一些,所以就选择了list。
list的时间复杂度: insert-------O(1) erase-------O(1)
vector的时间复杂度: insert------O(log(n)) erase------O(log(n))
感觉并不是正规解,只能说是讨了后台样例的便宜。。。
HDU5127 神坑题---vector 、 list 、 deque 的用法区别的更多相关文章
- C++ 顺序容器 vector list deque 之比较
在C++标准库中定义了三种顺序容器类型:vector,list和deque.所谓顺序容器就是根据位置来存储和访问元素,元素的排列次序与元素的值无关,而是由元素添加到容器的次序决定的. vector的底 ...
- POJ 1064 Cable master(二分查找+精度)(神坑题)
POJ 1064 Cable master 一开始把 int C(double x) 里面写成了 int C(int x) ,莫名奇妙竟然过了样例,交了以后直接就wa. 后来发现又把二分查找的判断条 ...
- vector,list,deque
stl提供了三个最基本的容器:vector,list,deque. vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由 ...
- list、vector、deque互相拷贝
#include <iostream> #include <stdlib.h> #include <string.h> #include <algorithm ...
- vector,deque,list的区别和使用
vector: 表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低. deque: 也表示N段连续的内存区域组成,但与ve ...
- STL容器 vector,list,deque 性能比较
C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差 ...
- C++顺序容器vector、deque、list
1.容器元素类型 C++中大多数数据类型能够作为容器的元素类型.容器元素类型必须满足一下两个条件:支持赋值和复制操作. 所以没有元素是引用类型的容器,同一时候IO对象和auto_ptr也不能作为容器的 ...
- 第十篇:顺序容器vector,deque,list的选用规则
前言 常见的顺序容器主要有三种 - vector,deque,list.它们实现的功能相差不大,那么实际开发中该如何进行选择呢?本文将为你解答这个问题. 分析 由于这三种容器实现的数据结构原型不同(v ...
- C++——STL之vector, list, deque容器对比与常用函数
STL 三种顺序容器的特性对比: vector 可变数组,内存空间是连续的,容量不会进行缩减.支持高效随机存取,即支持[]和at()操作.尾部插入删除效率高,其他位置插删效率较低: list 双向链表 ...
随机推荐
- Auty自动化测试框架第三篇——添加异常处理与日志收集
[本文出自天外归云的博客园] 本次对框架进行完善,增加了日志收集功能和修饰运行功能,完善后的lib目录如下:
- HDU 5795 A Simple Nim(简单Nim)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- 《BI那点儿事—数据的艺术》理解维度数据仓库——事实表、维度表、聚合表
事实表 在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”.一个按照州.产品和月份划分的销售量和销售额存储的事实表有5个列,概念上与下面的示例类似. Sate Product Mouth U ...
- js给文本框赋值 value与innerHTML
<input type="test" name="testName" id="testId"> 赋值操作: <script ...
- linux&win7双系统安装
linux&win7双系统安装 硬盘大小分配方案 按照顺序来建立分区 /swap 4G ==即交换分区,也是一种文件系统,它的作用是作为Linux的虚拟内存.在Windows下, ...
- velocity常用语句速查表
velocity常用语句 * 变量定义 #set($directoryRoot = "www" ) * #if($!list.size() != 0) //判断list不为空 #f ...
- Spring事务管理只对出现运行期异常进行回滚
原文:http://blog.csdn.net/abc19900828/article/details/39497631 使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择 ...
- 【转载】CSS position属性和实例应用
目前几乎所有主流的浏览器都支持position属性("inherit"除外,"inherit"不支持所有包括IE8和之前版本IE浏览器,IE9.IE10还没测试 ...
- HTTP状态码及其含义
下表显示了常见的HTTP 1.1状态代码以及它们对应的状态信息和含义.应当谨慎地使用那些只有HTTP 1.1支持的状态代码,因为许多浏览器还只能够支持HTTP 1.0.如果你使用了HTTP 1.1特有 ...
- windows防火墙命令详解
Old command 针对win7以下版本<包含win7> Example 1: 启用一个程序 Old command New command netsh firewall add al ...