【优先队列】【priority_queue】【getline】【istringstream】hdu 1873
来源:互联网 发布:js对象和字符串区别 编辑:程序博客网 时间:2024/06/04 19:33
此题需要注意2点:
1. 重载 "<" 的语义:当优先级相等时,先到的优先级高,不能指望 priority_queue 自动将先到但优先级相等的病人排在前面
2. 由于每组数据处理完之后,队列并没有 pop 空,但 priority_queue 又没有提供清空队列的方法,所以只能每组数据都重新创建对象
/** * hdu 1873 * 【优先队列】【priority_queue】 * 此题需要注意2点: * 1. 重载 "<" 的语义:当优先级相等时,先到的优先级高,不能指望 * priority_queue 自动将先到但优先级相等的病人排在前面 * 2. 由于每组数据处理完之后,队列并没有 pop 空,但 priority_queue 又 * 没有提供清空队列的方法,所以只能每组数据都重新创建对象 */#include <queue>#include <iostream>#include <string>using namespace std;struct SPatient{ int m_iId; int m_iPriority;};bool operator<(const SPatient &oPl, const SPatient &oPr){ if (oPl.m_iPriority == oPr.m_iPriority) { return (oPl.m_iId > oPr.m_iId); } return (oPl.m_iPriority < oPr.m_iPriority);}int main(){ SPatient oTmpP; int iCmdNum; string strTmp; int iDoctNum; // doctor number int iNum; while (cin >> iCmdNum) { priority_queue<SPatient> arrpqPque[3]; iNum = 0; while (iCmdNum--) { cin >> strTmp; if ('I' == strTmp[0]) { ++iNum; cin >> iDoctNum >> oTmpP.m_iPriority; oTmpP.m_iId = iNum; arrpqPque[iDoctNum-1].push(oTmpP); } else if ('O' == strTmp[0]) { cin >> iDoctNum; if (arrpqPque[iDoctNum-1].empty()) { cout << "EMPTY" << endl; } else { cout << arrpqPque[iDoctNum-1].top().m_iId << endl; arrpqPque[iDoctNum-1].pop(); } } } } return 0;}
getline() 和 istringstream 的注意点
/** * hdu 1873 * 用 istringstream 处理输入 */#include <queue>#include <iostream>#include <string>#include <sstream>using namespace std;struct SPatient{ int m_iId; int m_iPriority;};bool operator<(const SPatient &oPl, const SPatient &oPr){ if (oPl.m_iPriority == oPr.m_iPriority) { return (oPl.m_iId > oPr.m_iId); } return (oPl.m_iPriority < oPr.m_iPriority);}int main(){ SPatient oTmpP; int iCmds; string strCmd; istringstream issCmd; string strTmp; int iDoctNum; // doctor number int iPriority; int iNum; while (cin >> iCmds) { cin.get(); // 【1】 吸收换行符,防止 getline 吸入 priority_queue<SPatient> arrpqPque[3]; iNum = 0; while (iCmds--) { getline(cin, strCmd); issCmd.clear(); // 【2】 修改标志 issCmd.str(strCmd); if ('I' == strCmd[0]) { ++iNum; issCmd >> strTmp >> iDoctNum >> iPriority; oTmpP.m_iId = iNum; oTmpP.m_iPriority = iPriority; arrpqPque[iDoctNum-1].push(oTmpP); } else if ('O' == strCmd[0]) { issCmd >> strTmp >> iDoctNum; if (arrpqPque[iDoctNum-1].empty()) { cout << "EMPTY" << endl; } else { cout << arrpqPque[iDoctNum-1].top().m_iId << endl; arrpqPque[iDoctNum-1].pop(); } } } } return 0;}
0 0
- 【优先队列】【priority_queue】【getline】【istringstream】hdu 1873
- hdu 1873 优先队列 priority_queue
- 【优先队列】【链表】【priority_queue】【list】hdu 1434
- 优先队列Priority_Queue
- 优先队列priority_queue
- 优先队列priority_queue
- STL priority_queue 优先队列
- STL priority_queue 优先队列
- priority_queue优先队列使用
- Priority_queue优先队列
- Priority_queue优先队列容器
- 优先队列(priority_queue)
- priority_queue 优先队列
- 优先队列priority_queue
- 优先队列priority_queue用法
- 优先队列---priority_queue
- 优先队列 priority_queue
- priority_queue(优先队列)
- 定时器 T1 通过查询方式控制 LED1 周期性闪烁
- HTML中id、name、class 区别
- 流逝的岁月,致我们逝去的青春
- Windows快捷键大全
- Tomcat集群和Session共享的配置方法
- 【优先队列】【priority_queue】【getline】【istringstream】hdu 1873
- git使用方法备忘
- Maven学习 (一) 搭建Maven环境
- 安装配置Apache+Tomcat集群和session共享
- Maven学习 (二) Eclipse 上安装 Maven3插件
- HDU3415单调队列
- Maven学习 (三) 使用m2eclipse创建web项目
- hash算法
- 2014微软实习生招聘第二题