zoukankan      html  css  js  c++  java
  • D FFF团的怒火

    Time Limit:1000MS  Memory Limit:65535K

    题型: 编程题   语言: 无限制

     

    描述

    在信软学院,男女比例失衡已经是习以为常的事情。
    在这样的一个学院,诞生了一个神秘的组织,FFF团。
        O  O  O
       /F/F/F
       / / / 
    他们的任务是将一切不是真爱的爱情扼杀在摇篮中。
    对于某些信软学院的学生,每天都只有一些时间是空闲的,其他时间都只能默默地打代码。
    在这段空闲的时间里,所有男生都会去寻找一位空闲的女生,希望能与其进行一次美妙的约会。
    然而FFF团的团长——小邪早已看穿一切。
    为了防止FFF团团员做出过激行为,小邪决定对所有有着同一段空闲时间的异性进行监控。
    现在,小邪想知道,这样的异性有多少对。但是如果小邪现在不对团员进行监控,将会发生严重的后果,于是,统计的任务就交了给你。
    
    出题人:K·小邪
    

     

    输入格式

    第一行是两个整数n,m(0 <= n,m <= 100),分别代表男生的数量和女生的数量
    
    接下来输入n个男生的数据,对于每个男生有一组数据
    每组数据的第一行为一个整数t( 0 <= t <= 10 ),代表该男生拥有的空闲时间段数量
    接下来为t行
    每行的格式为XX:XX-XX:XX    (00:00 <= XX:XX <= 23:59)
    代表其在XX:XX至XX:XX的时间段有空闲时间,但是可能跨越一天
    
    接下来m个女生的数据,输入格式同男生
    

     

    输出格式

    输出一个整数,代表有可能见面的男女的对数

     

    输入样例

    (Sample #XX:不是输入的一部分)
    Sample #1:
    
    1 1
    1
    23:59-00:01
    1
    08:00-19:00
    
    
    Sample #2:
    
    1 2
    2
    19:30-19:33
    00:00-08:00
    1
    07:30-09:00
    1
    19:30-19:33

     

    输出样例

    Sample #1:
    0
    
    Sample #2:
    2

     

    Hint

    注意端点相交也算是有可能见面的
    比如08:00-09:00是可能与09:00-10:00见面的
    并且对于同一个人输入的区间可能有重叠
    #include<stdio.h>
    #include<string.h>
    int boy[1050][4], girl[1050][4];
    
    int go(int, int );
    int main()
    {
        int i, j, tb, tg, temp, temp1, temp2;
        int t1, t2, n, m, count = 0;
         int k1, k2, k3, k4;
        scanf("%d%d", &n, &m);
    
        memset(boy, 0, sizeof(boy));
        memset(girl, 0, sizeof(girl));
        for (i = 0; i < n; i++)
        {
            scanf("%d", &tb);
            boy[10 * i][0] = tb;
            for (j = 10 * i; j < 10 * i + tb; j++)
            {
                scanf("%d:%d-%d:%d", &k1, &k2, &k3, &k4);
                temp1 = k1 * 100 + k2;
                temp2 = k3 * 100 + k4;
                boy[j][1] = temp1;
                boy[j][2] = temp2;
    
            }
        }
        for (i = 0; i < m; i++)
        {
            scanf("%d", &tg);
            girl[10 * i][0] = tg;
            for (j = 10 * i; j < 10 * i + tg; j++)
            {
                scanf("%d:%d-%d:%d", &k1, &k2, &k3, &k4);
                temp1 = k1 * 100 + k2;
                temp2 = k3 * 100 + k4;
                girl[j][1] = temp1;
                girl[j][2] = temp2;
            }
        }
        for (i = 0; i < n; i++)
            for (j = 0; j < m; j++)
            {temp = count;
                for (t1 = 10 * i; t1 < 10 * i + boy[10 * i][0]; t1++)
                {
                    for (t2 = 10 * j; t2 < 10 * j + girl[10 * j][0]; t2++)
                        if (go(t1, t2))
                        {
    
                            count++;
                            break;
                        }
                    if (count > temp)
                        break;
                }
            }
        printf("%d", count);
        return 0;
    }
    
    int go(int t1, int t2)
    {
        int k1, k2, k3, k4;
        k1 = boy[t1][1];
        k2 = boy[t1][2];
        k3 = girl[t2][1];
        k4 = girl[t2][2];
        if (k2 >= k1 && k4 >= k3)
        {
            if (k1>k4||k3>k2)
                return 0;
            else
                return 1;
        }
        else if (k2 < k1 && k4 < k3)
            return 1;
        else
        {
            if (k1 > k2)
            {
                if (k3 > k2 && k4 < k1)
                    return 0;
                else
                    return 1;
            }
            else
            {
            if (k1 > k4 && k2 < k3)
                return 0;
            else
                return 1;
            }
        }
    }
    View Code
  • 相关阅读:
    常见面试题
    3*0.1 == 0.3 将会返回什么?true 还是 false?
    poj_2186 强连通分支
    强连通分量、割点、桥
    最小生成树
    poj_2349 Kruskal 最小生成树
    poj_1258 prim最小生成树
    最短路径
    poj_1125 Floyd最短路
    poj_1860 SPFA
  • 原文地址:https://www.cnblogs.com/orchidzjl/p/4263637.html
Copyright © 2011-2022 走看看