HDU 1387 Team Queue( 单向链表 )
Team Queue
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1294 Accepted Submission(s): 442
In a team queue each element belongs to a team. If an element enters the queue, it first searches the queue from head to tail to check if some of its teammates (elements of the same team) are already in the queue. If yes, it enters the queue right behind them. If not, it enters the queue at the tail and becomes the new last element (bad luck). Dequeuing is done like in normal queues: elements are processed from head to tail in the order they appear in the team queue.
Your task is to write a program that simulates such a team queue.
Finally, a list of commands follows. There are three different kinds of commands:
ENQUEUE x - enter element x into the team queue
DEQUEUE - process the first element and remove it from the queue
STOP - end of test case
The input will be terminated by a value of 0 for t.
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <string>
- #include <cmath>
- #include <vector>
- #include <queue>
- #include <map>
- #include <set>
- #include <stack>
- #include <algorithm>
- using namespace std;
- #define root 1,n,1
- #define lson l,mid,rt<<1
- #define rson mid+1,r,rt<<1|1
- #define lr rt<<1
- #define rr rt<<1|1
- typedef long long LL;
- typedef pair<int,int>pii;
- #define X first
- #define Y second
- const int oo = 1e9+;
- const double PI = acos(-1.0);
- const double eps = 1e- ;
- const int N = ;
- const int mod = ;
- int t , n , head , tail ;
- int num[N] , nxt[N] , team_last[N] , belong[N];
- void Init() {
- memset( nxt , - ,sizeof nxt );
- memset( team_last , - ,sizeof team_last );
- memset( belong , - ,sizeof belong );
- head = tail = - ;
- }
- void Push1( int x ) {
- if( head == - ) {
- head = tail = x ;
- nxt[x] = - ;
- }
- else {
- nxt[tail] = x ;
- nxt[x] =- ;
- tail = x ;
- }
- }
- void Push2( int x , int last , int team ) {
- nxt[x] = nxt[last];
- nxt[last] = x ;
- team_last[team] = x ;
- if( nxt[x] == - ) tail = x ;
- }
- void Run() {
- Init(); int x ;
- for( int i = ; i <= t ; ++i ) {
- cin >> n ;
- for( int j = ; j < n ; ++j ){
- cin >> x ; belong[x] = i ;
- }
- }
- string s ;
- while( cin >> s ) {
- if( s[] == 'S' ) break ;
- else if( s[] == 'E' ) {
- cin >> x ;
- if( belong[x] == - ) Push1(x);
- else {
- if( team_last[belong[x]] == - ) Push1(x) , team_last[belong[x]] = x ;
- else Push2(x,team_last[belong[x]],belong[x]);
- }
- }
- else {
- cout << head << endl ;
- if( team_last[belong[head]] == head ) team_last[belong[head]] = - ;
- head = nxt[head] ;
- }
- }
- }
- int main()
- {
- #ifdef LOCAL
- freopen("in.txt","r",stdin);
- #endif // LOCAL
- ios::sync_with_stdio(false);
- int _ , cas = ; //cin >> _ ;
- while( cin >> t && t ) {
- cout << "Scenario #" << cas++ << endl ;
- Run(); cout << endl ;
- }
- }
HDU 1387 Team Queue( 单向链表 )的更多相关文章
- hdu 1387 Team Queue (链表)
题目大意: 不同的人在不同的队伍里,插入链表的时候假设这个链表里有他的队友,就把它放到最后一个队友的最后.假设没有队友,就把它放到整个链表的最后面. 出链表的时候把第一个人拿出来. 思路分析: 要模拟 ...
- HDU 1387 Team Queue
Team Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Team Queue(STL练习题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1387 Team Queue Time Limit: 2000/1000 MS (Java/Others ...
- hdu 1387(Team Queue) STL
Team Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Team Queue (HDU:1387)
Queues and Priority Queues are data structures which are known to most computer scientists. The Team ...
- 利用 C++ 单向链表实现队列
利用C++ 单向链表实现数据结构队列,其实和上一篇基本内容相同,仅仅是插入的时候在链表的尾部插入,取元素都是一样的,都从头部取. #pragma once #include "stdio.h ...
- Python手写模拟单向链表对象,栈对象和树
单向链表: class error(Exception): def __init__(self,msg): super(error,self).__init__() self.msg=msg def ...
- Reverse Linked List II 单向链表逆序(部分逆序)
0 问题描述 原题点击这里. 将单向链表第m个位置到第n个位置倒序连接.例如, 原链表:1->2->3->4->5, m=2, n =4 新链表:1->4->3-& ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...
随机推荐
- JVM(7)之 从GC日志分析堆内存
开发十年,就只剩下这套架构体系了! >>> 在前面的文章中,我们只设置了整个堆的内存大小.但是我们知道,堆又分为了新生代,年老代.他们之间的内存怎么分配呢?新生代又分为Eden和 ...
- RestController和Controller的区别
知识点:@RestController注解相当于@ResponseBody + @Controller合在一起的作用. 1) 如果只是使用@RestController注解Controller,则Co ...
- JavaScript中的柯里化
转载自:https://www.cnblogs.com/zztt/p/4142891.html 何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Ha ...
- JavaScript深入之类数组对象与arguments(转载)
类数组对象 所谓的类数组对象: 拥有一个 length 属性和若干索引属性的对象 举个例子: var array = ['name', 'age', 'sex']; var arrayLike = { ...
- 本机ip地址怎么查
转自:https://www.192ly.com/basic/local-ip-address-lookup-method.html 百度搜索一下[IP],你就可以轻松看到你的IP地址了,百度出来的 ...
- 从__name__=='__main__'说到__builtin__
一.__name__ 我们在写好代码进行自测的时候一般会先写这样一行代码: # inter_method if __name__ == '__main__': 为什么呢,可能并不是所有人都考虑过,这个 ...
- python数字图像处理(五) 图像的退化和复原
import cv2 import numpy as np import matplotlib.pyplot as plt import scipy import scipy.stats %matpl ...
- Nginx1.6.0+MySQL5.6.19+PHP5.5.14(centos)
一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...
- hdu 5868:Different Circle Permutation 【Polya计数】
似乎是比较基础的一道用到polya定理的题,为了这道题扣了半天组合数学和数论. 等价的题意:可以当成是给正n边形的顶点染色,旋转同构,两种颜色,假设是红蓝,相邻顶点不能同时为蓝. 大概思路:在不考虑旋 ...
- 《DNS稳定保障系列3--快如闪电,域名解析秒级生效》
在刚刚过去的双十一,又是一个全民狂欢的盛宴,天猫双十一的成交量高达2684亿.无数小伙伴在淘宝.天猫里买买买,今年你又剁手了多少?言归正传,在你疯狂秒杀的时候,有没有发现,今年的购物体验一如既往的好, ...