您的位置:首页 > 产品设计 > UI/UE

ACM学习历程——UVA540 Team Queue(队列,map:Hash)

2014-12-14 12:14 423 查看
Description

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: