(~ ̄▽ ̄)~*

(注意下面代码中关于iterator的用法,此代码借鉴某大牛)

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std; struct Wall
{
int row;//表示墙在哪行
int left;
int right;
}; int col[105];//保存每列的墙数
vector<Wall> wall; int main()
{
int t,n,k,ax,ay,bx,by;
scanf("%d",&t);
while(t--)
{
wall.clear();
memset(col,0,sizeof(col));
scanf("%d%d",&n,&k);
int maxright=0;
int cnt=0;
while(n--)
{
scanf("%d%d%d%d",&ax,&ay,&bx,&by);
if(ax>bx)
swap(ax,bx);//有可能先输入墙的右端点
if(bx>maxright)
maxright=bx; Wall temp;
temp.row=ay; temp.left=ax; temp.right=bx;
wall.push_back(temp);
for(int i=ax;i<=bx;i++)
col[i]++;
}
int maxt;
for(int i=0;i<=maxright;i++)
{//前面maxright记录了所有墙中的最右端,这样遍历的时候,在maxright结束即可
while(col[i]>k)
{//遍历每列,当该列的墙数>k,说明需要删墙了
vector<Wall>::iterator it=wall.begin();//遍历迭代器
vector<Wall>::iterator iter;//临时迭代器
maxt=0;
while(it!=wall.end())
{//把右边界最大(right大于maxt)的墙(用iter记录)删掉(erase vector元素wall中的第iter个元素)
if((*it).left<=i)
{
if((*it).right>maxt)
{
maxt=(*it).right;
iter=it;
}
}
it++;
}
for(int j=(*iter).left;j<=(*iter).right;j++)
col[j]--;//删掉墙相关的记录
wall.erase(iter);//删掉墙
cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}

POJ 1230 Pass-Muraille#贪心+vector迭代器用法的更多相关文章

  1. vector迭代器用法

    #include<iostream> #include<vector> using namespace std; int main() { vector<int> ...

  2. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  3. C++ Iterator迭代器介绍及Iterator迭代器用法代码举例

    C++ Iterator迭代器介绍 迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针.举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历.有这么几种迭代器如下: 迭代 ...

  4. C++ set用法以及迭代器用法

    有关set的一些常用函数 1.begin() / end() 返回首/尾元素迭代器 2.rbegin() / rend() 返回尾/首元素反向迭代器,反向迭代器可以反向遍历容器的迭代器,从下面的程序已 ...

  5. STL中的Vector相关用法

    STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...

  6. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  7. C++vector迭代器失效的问题

    转载:http://blog.csdn.net/olanmomo/article/details/38420907 转载:http://blog.csdn.net/stpeace/article/de ...

  8. vector迭代器失效的一种情形

    使用过STL的人都应该知道关于迭代器失效的原理,这里以后vector迭代器失效为例: 第一种:当插入一个元素到vector中,如果插入后容器已满,那么容器将新开辟一块内存区域,然后 将原内存中的数据拷 ...

  9. POJ 3190 Stall Reservations贪心

    POJ 3190 Stall Reservations贪心 Description Oh those picky N (1 <= N <= 50,000) cows! They are s ...

随机推荐

  1. Socket编程中的长连接、短链接以及心跳包机制详解

    参考:http://blog.csdn.net/zdwzzu2006/article/details/7723738 一.定义 1.TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,se ...

  2. Linux Ubuntu 虛擬機系統自定義桌面分辨率且重啓後保持不變

    我用 VMware Workstation 12 Pro 安裝的 Ubuntu MATE Desktop Environment 1.12.1,發現安裝後沒有需要的分辨率,於是安裝 VMware To ...

  3. C#深复制与浅复制

    C#深复制与浅复制 C#中对于数据的复制机制虽然简单但是容易让人误解.C#数据类型大体分为值类型(value type)与引用类型(reference type).对于值类型数据,复制的时候直接将数据 ...

  4. js 设计模式-接口

    js模拟java接口检测函数:确保子类实现接口中的方法:(出自js设计模式) 上代码: <script type="text/javascript" > <%-- ...

  5. zabbix 布署实践【1 server安装】

    通过openstack环境,开通了2台只有根分区的虚拟机,   目的是为了监控公司所有的物理机,网络设备,虚拟机,总计300个台以上,推荐配置,zabbix官方文档是有给出指引的   环境:CentO ...

  6. quagga源码分析--通用库thread

    quagga是开源路由器软件,提供的用户界面与思科,华为的路由器的人机接口几乎一致,非常有学习价值,尤其是开源的协议代码,简直亮瞎了我的小眼睛. quagga的介绍,我就不赘述了,有兴趣的可以找度娘或 ...

  7. PhpMyAdmin隐藏数据库设置同前缀失效的问题

    用PhpMyAdmin默认会把所有数据库都显示出来,一些如 MySQL,information_schema之类的也会显示,这样既不安全看着也不爽,隐藏掉最好. 修改 config.inc.php 或 ...

  8. JSON文件处理

    牛X的JSON解析JSON字符串显示字典键值 public void ResolveJson() { //定义的JSON字符串,注意JSON的格式 string str = @” { “”Name”” ...

  9. 使用vscode对c进行调试

    最近在学习C语言.知道vscode支持对c语言的代码的调试,就想试试.然后找了教程: https://code.visualstudio.com/docs/languages/cpp http://w ...

  10. unity3d和php后台简单交互--一

    unity3d开发时,用PHP作为后台是个不错的选择.对一些数据吞吐量不是很大的游戏,比如某个游戏的排名,登录等等,一般的php程序能够胜任了,并且php语言简单,开发容易对数据库尤其是mysql的支 ...