题3:买票三人行
lzs,v11,shadow三个人一起去火车站买票,售票处有三个窗口,每个窗口都有人在排队,三个人各自独立地选择了一个窗口去排队买票,现在已知从开始售票到某一时刻,三个售票窗口队列的人员流动信息,你知道他们分别是第几个买到票的人吗?
View Code
/*
2 测试组数
6 n行
0 IN lzs 表示第几个队列来人了
1 IN v11
2 IN shadow
0 OUT 若该对头有人则他买到票,否则忽略该信息
1 OUT
2 OUT
7
0 IN v11
2 OUT
2 IN shadow
1 IN ks
0 OUT
1 OUT 由于不是那三人之一,所以他只记住买票的次序其他忽略
2 OUT
*/
#include<stdio.h>
#include<iostream>
#include<queue>
#include<string>
#include<string.h>
using namespace std;
struct List
{
int x;
char ch[5];
char name[10];
}list[50010];
int main()
{
queue<string>Q_0;
queue<string>Q_1;
queue<string>Q_2;
int T,n,i;
int tes=1;
scanf("%d",&T);
while(T--)
{
int cas=1;
int rem[5];
scanf("%d",&n);
printf("Case %d:\n",tes++);
memset(rem,0,sizeof(rem));
for (i=0;i<n;i++)
{
scanf("%d%s",&list[i].x,list[i].ch);//OUT只有两个输入,所以得判断IN后在输入name
if(!strcmp(list[i].ch,"IN"))
{
scanf("%s",list[i].name);
if(list[i].x==0) Q_0.push(list[i].name);
else if(list[i].x==1) Q_1.push(list[i].name);
else if(list[i].x==2) Q_2.push(list[i].name);
}
else if(!strcmp(list[i].ch,"OUT"))
{
if(list[i].x==0)
{//当队列为空就忽略
if(!Q_0.empty())
{
if(Q_0.front()=="lzs")
{
rem[0]=cas;//0只记录lzs,1只记录v11,2只记录shadow
}
else if(Q_0.front()=="v11")
{
rem[1]=cas;
}
else if(Q_0.front()=="shadow")
{
rem[2]=cas;
}
Q_0.pop();
cas++;
}
}
else if(list[i].x==1)
{
if(!Q_1.empty())
{
if(Q_1.front()=="lzs")
{
rem[0]=cas;
}
else if(Q_1.front()=="v11")
{
rem[1]=cas;
}
else if(Q_1.front()=="shadow")
{
rem[2]=cas;
}
Q_1.pop();
cas++;
}
}
else if(list[i].x==2)
{
if(!Q_2.empty())
{
if(Q_2.front()=="lzs")//三个if主要是排除不是这三人之一的人
{
rem[0]=cas;
}
else if(Q_2.front()=="v11")
{
rem[1]=cas;
}
else if(Q_2.front()=="shadow")
{
rem[2]=cas;
}
Q_2.pop();//排出买到票的人,因为可能不是lzs,v11,shadow三人之一
cas++;
}
}
}
}
printf("lzs:");
if(rem[0]!=0) printf("%d\n",rem[0]);
else printf("Unknown\n");
printf("v11:");
if(rem[1]!=0) printf("%d\n",rem[1]);
else printf("Unknown\n");
printf("shadow:");
if(rem[2]!=0) printf("%d\n",rem[2]);
else printf("Unknown\n");
while(!Q_0.empty()) Q_0.pop();//清空队列**很重要
while(!Q_1.empty()) Q_1.pop();//队列非空会记录上一次测试数据的结果
while(!Q_2.empty()) Q_2.pop();//导致下一次的测试运行包含上一次的内容
}
return 0;
}
题7:幸运图
我们认为,如果一个无向图不存在自环(1和1这样是自环,不是环)和重边,那么它就是幸运图。现在,给你一个无向图,判断它是否是幸运图。
#include<stdio.h>
#include<string.h>
int edge[1010][1010];
int main()
{
int n,m,i;
int a,b;
int flag;
while(scanf("%d%d",&n,&m)!=EOF)
{
flag=0;
memset(edge,0,sizeof(edge));
for (i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
if(a==b) //是否自环
{
flag=1;
}
else if(a>b)
{
int t=a;
a=b;
b=t;
}
edge[a][b]++;
if(edge[a][b]==2) flag=1;//判断是否重边
}
if(flag) printf("No\n");
else printf("Yes\n");
}
return 0;
}
题6:电动车通行证制度
还没有模拟出来,待续。。。