FOJFOJ有奖月赛-2012年4月(校赛热身赛)-解题报告总结

题3:买票三人行

lzs,v11,shadow三个人一起去火车站买票,售票处有三个窗口,每个窗口都有人在排队,三个人各自独立地选择了一个窗口去排队买票,现在已知从开始售票到某一时刻,三个售票窗口队列的人员流动信息,你知道他们分别是第几个买到票的人吗?

View Code
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这样是自环,不是环)和重边,那么它就是幸运图。现在,给你一个无向图,判断它是否是幸运图。

View Code
#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:电动车通行证制度

还没有模拟出来,待续。。。

 

你可能感兴趣的:(2012)