前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FOJFOJ有奖月赛-2012年4月(校赛热身赛)-解题报告总结

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

作者头像
用户1624346
发布2018-04-11 17:03:16
6210
发布2018-04-11 17:03:16
举报
文章被收录于专栏:calmoundcalmoundcalmound

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-04-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档