ACM学习历程——UVA540 Team Queue(队列,map:Hash)
2014-12-14 12:14
423 查看
Description
View Code
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <set> #include <map> #include <queue> #include <string> #include <algorithm> #define LL long long using namespace std; int t; int Hash[1000005]; bool vis[1005]; queue<int> q[1005]; void input() { memset(Hash, -1, sizeof(Hash)); memset(vis, false, sizeof(vis)); for (int i = 0; i < 1005; ++i) while (!q[i].empty()) q[i].pop(); int num, id = 0, tmp; for (int i = 0; i < t; ++i) { scanf("%d", &num); for (int i = 0; i < num; ++i) { scanf("%d", &tmp); Hash[tmp] = id; } id++; } } void push(queue<int> &teamQ, int k) { if (!vis[Hash[k]]) { vis[Hash[k]] = true; teamQ.push(Hash[k]); } q[Hash[k]].push(k); } void pop(queue<int> &teamQ) { int k = teamQ.front(), out; out = q[k].front(); q[k].pop(); if (q[k].empty()) { teamQ.pop(); vis[k] = false; } printf("%d\n", out); } void work() { queue<int> teamQ; char str[15]; int k; for (;;) { scanf("%s", str); if (str[0] == 'S') return; if (str[0] == 'E') { scanf("%d", &k); push(teamQ, k); } else pop(teamQ); } } int main() { //freopen("test.in", "r", stdin); int times = 1; while (scanf("%d", &t) != EOF && t) { printf("Scenario #%d\n", times++); input(); work(); printf("\n"); } return 0; }
View Code
此处team内部排队使用了链式结构的Queue。 代码2:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #include <set> #include <map> #include <vector> #include <queue> #include <string> #define inf 0x3fffffff #define eps 1e-10 using namespace std; struct isQueue { int val; isQueue *next; }; struct Queue { isQueue *top; isQueue *rear; void Init() { top = (isQueue *)malloc(sizeof(isQueue)); rear = (isQueue *)malloc(sizeof(isQueue)); top->next = rear; rear->val = -1; } void Pop() { top = top->next; } int Front() { return top->next->val; } void Push(int k) { isQueue *v = (isQueue *)malloc(sizeof(isQueue)); rear->val = k; rear->next = v; rear = rear->next; rear->val = -1; } bool Empty() { if (top->next->val == -1) return 1; else return 0; } }; struct node { int isin; Queue turn; }; node p[1005]; map <int, int> Hash; int t; void Init() { Hash.clear(); int k, v; for (int i = 0; i < t; ++i) { p[i].isin = 0; p[i].turn.Init(); scanf("%d", &k); for (int j = 0; j < k; ++j) { scanf("%d", &v); Hash[v] = i; } } } void qt() { char ch[20]; int num; int x; queue <int> q; for (;;) { scanf("%s", ch); if (ch[0] == 'S') { printf("\n"); return; } if (ch[0] == 'E') { scanf("%d", &num); x = Hash[num]; if (p[x].isin == 0) { q.push(x); p[x].turn.Push(num); p[x].isin++; } else { p[x].turn.Push(num); p[x].isin++; } } else if (ch[0] == 'D') { x = q.front(); num = p[x].turn.Front(); if (p[x].isin == 1) q.pop(); p[x].turn.Pop(); p[x].isin--; printf("%d\n", num); } } } int main() { //freopen ("test.txt", "r", stdin); int times = 1; while (scanf("%d", &t) != EOF && t != 0) { printf("Scenario #%d\n", times); Init(); qt(); times++; } return 0; }
相关文章推荐
- Team Queue (uva540 队列模拟)
- Team Queue (uva540 队列模拟)
- 团体队列UVA540 Team Queue(队列简单用法)
- HDU 1387 && UVa 540 Team Queue(队列应用)
- UVA540 Team Queue(队列简单用法)
- UVA540 Team Queue(模拟:队列)
- #UVA 540 Team Queue (STL map+queue)
- Team Queue UVA 540 (团体队列)
- uva 540 Team Queue (队列模拟)
- Uva540 Team Queue 【队列】【例题5-6】
- ACM学习历程19——queue队列容器与priority_queue优先队列容器
- UVA 540 Team Queue(团体队列)
- Team Queue UVA 540 queue+map LRJ做法
- 《算法竞赛入门经典2ndEdition 》例题5-6 团体队列(Team Queue, Uva540)
- UVa 540 (团体队列) Team Queue
- UVa - 540 - Team Queue(STL - 队列queue)
- UVA540:Team Queue(团体队列)
- 例题5-6 UVA 540 Team Queue团体队列
- UVA 540 Team Queue(队列)
- UVA - 540 Team Queue(STL,队列 )