zoukankan      html  css  js  c++  java
  • 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:电动车通行证制度

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

  • 相关阅读:
    Java实现第八届蓝桥杯最大公共子串
    Java实现第八届蓝桥杯最大公共子串
    Java实现第八届蓝桥杯最大公共子串
    Java实现第八届蓝桥杯最大公共子串
    Java实现第八届蓝桥杯杨辉三角
    Java HttpClient库的使用
    OpenStack-API开发
    收集整理的openstack java封装 api的第三方实现的选择
    Openstack API 开发 快速入门
    PlayFramework的安装和配置以及向eclipse导入项目工程
  • 原文地址:https://www.cnblogs.com/zsboy/p/2452004.html
Copyright © 2011-2022 走看看