FZU 2084(模拟)

Problem 2084 电动车通行证制度

Accept: 80    Submit: 365
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

为了更好地维护校园交通秩序,加强对学校电动车的管理,学校保安叔叔们决定对学生们的电动车进行出入通行证管理。

当电动车进入校门时,保安将发放一张通行证。

当电动车离校时,需要将通行证交还保安,方可放行。

每次电动车进入、离开校园时,都需要记录车牌号。

如果出现异常情况(同一电动车连续2次及以上离开校园,或者连续2次及以上进入校园)电动车将不被放行。

 Input

输入第一行为T,表示Case数

每组Case,为一连串的电动车进入/离开校园请求。

“IN 车牌号”:例如IN C-1089,表示车牌号为C-1089的电动车希望进入校园。

“OUT 车牌号”:例如OUT C-1089,表示车牌号为C-1089的电动车希望离开校园。

“LIST”:根据被放行的电动车记录,列出在校内的电动车车牌列表(不被放行的记录不算),按第一次出入的顺序排序。

“EXIT”:该组Case结束

碰到异常情况不放行时,输出一行“Error”

车牌号由大小写字母、数字、‘-’组成,长度不超过10。

命令数不超过10000

 Sample Input

2IN ABCIN DEFIN ABCOUT DDDOUT DEFOUT DEFLISTEXITIN aaaIN bbbOUT cccLISTEXIT

 Sample Output

Case 1:ErrorErrorABCCase 2:aaabbb

 Source

FOJ有奖月赛-2012年4月(校赛热身赛)



题解:直接使用STL模拟就好了,有个坑点,注意看题目条件,【按第一次出入的顺序排序。】,





#include<cstdio>  
#include<cstring>  
#include<cstdlib>  
#include<cmath>  
#include<iostream>  
#include<algorithm>  
#include<vector>  
#include<map>  
#include<set>  
#include<queue>  
#include<string>  
#include<bitset>  
#include<utility>  
#include<functional>  
#include<iomanip>  
#include<sstream>  
#include<ctime>  
using namespace std;

#define N int(2e2)
#define inf int(0x3f3f3f3f)  
#define mod int(1e9+7)  
typedef long long LL;

set<string>in;
set<string>out;
vector<string>lst;
map< string, int >pos;
set< pair<int, string> >ans;
int main()
{
#ifdef CDZSC  
	freopen("i.txt", "r", stdin);
	//freopen("o.txt","w",stdout);  
	int _time_jc = clock();
#endif  
	int t, cas = 0;
	scanf("%d", &t);
	char s[N], od[N];
	while (t--)
	{
		int tt = 0;
		pos.clear();
		lst.clear();
		in.clear();
		out.clear();
		printf("Case %d:\n", ++cas);
		while (scanf("%s", s))
		{
			if (s[0] == 'E')break;
			if (s[0] == 'I' || s[0] == 'O')scanf("%s", od);
			if (s[0] == 'I')
			{
				if (in.count(string(od)))
				{
					puts("Error");
				}
				else
				{
					if (out.count(string(od)))
					{
						out.erase(out.find(string(od)));
					}
					if(!pos.count(string(od)))
						pos[string(od)] = ++tt;
					in.insert(string(od));
				}
			}
			if (s[0] == 'O')
			{
				if (out.count(string(od)))
				{
					puts("Error");
				}
				else
				{
					if (in.count(string(od)))
					{
						in.erase(in.find(string(od)));
					}
					if (!pos.count(string(od)))
						pos[string(od)] = ++tt;
					out.insert(string(od));
				}
			}
			if (s[0] == 'L')
			{
				ans.clear();
				for (set<string>::iterator it = in.begin(); it != in.end(); it++)
				{
					ans.insert(make_pair(pos[*it], *it));
				}
				for (set<pair<int, string> >::iterator it = ans.begin(); it != ans.end(); it++)
				{
					//printf("number:%d ", it->first);
					printf("%s\n", it->second.c_str());
				}
			}
		}
	}
	return 0;
}




你可能感兴趣的:(FZU 2084(模拟))