zoukankan      html  css  js  c++  java
  • 8628 相亲

    8628 相亲

    时间限制:500MS  内存限制:1000K
    提交次数:409 通过次数:81

    题型: 编程题   语言: G++;GCC

     

    Description

        在咱遥远破旧的小村庄,男女成婚仍是以古老的、传统的模式:相亲,合时辰八字,合得来则订婚,择日
    成亲。其中最忽悠的则是合时辰八字,话说是月老决定,实则是根据某条公式,算是否合得来。通过多年
    的明察暗访,终于让我知道合地辰八字的公式了。其规则如下:
    1、 根据某条公式将时辰八字转化成一个整数num, 为了方便起见,以后就用这个num表示该人的时辰八字。
    2、 如果男女双方的时辰八字之和等于一个给定的数sum,则称此对时辰八字合得来。否则相反。
    3、 如果时辰八字合不来的人结婚,会被抓去浸猪笼的,因为会被当成是对神的亵渎。
        如此可知,在咱们村一对男女可以结婚的概率是相当的小。现在你的任务是算出咱们村有多少对男女
    可以结婚?
    




    输入格式

    第一行输入一个整数T(1<=T<=10),表示样例的个数。
    接下来有T个样例,对于每一个样例,第一行输入两个整数n(0<n<10^5),sum(0<sum<=10^8), n 表示
    咱们村的人口数,sum 表示给定的和。接下来输入n个人的信息,每个人用两个整数来表示,其中前面一
    个表示性别sex(0表示女,1 表示男),后面一个表示其时辰八字num(0<=num<sum,且所有的num
    的值各不相同)。为了方便起见,n 个人的信息是按照每个人的num的递增顺序给出的。
    



    输出格式

    输出占一行,表示能结婚的男女对数。(注意:没有同性的可以结婚,咱国家不允许)



     

    输入样例

    1
    4 6
    0 2 1 3 0 3 1 4
    



     

    输出样例

    2



     

    提示

    
    



     

    来源

     王鑫杰 

     

    作者

     admin

      题目中有说,每个人的信息都是按顺序递增的,无疑在时间限制上把难度又降低了(虽然本来题目就不难的...) 根据题目要求写一个二分查找的函数,然后把每个男人(or女人)扫一遍就OK了。 下面上代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 int male[100000],female[100000],SUM;
     6 void check(int left,int right,int i);
     7 int main()
     8 {
     9     int t;
    10     scanf("%d",&t);
    11     while(t--)
    12     {
    13         int n,sum,i,temp1,temp2;   int t1=0,t2=0;  SUM=0;
    14         scanf("%d %d",&n,&sum);
    15         for(i=0;i<n;i++)
    16         {
    17             scanf("%d %d",&temp1,&temp2);
    18             if(temp1==0)
    19                 female[t1++]=temp2;
    20             else male[t2++]=temp2;
    21         }
    22         //
    23         for(i=0;i<t2;i++)
    24             check(0,t1-1,sum-male[i]);
    25 
    26         //
    27         printf("%d
    ",SUM);
    28     }
    29     return 0;
    30 }
    31 void check(int left,int right,int i)
    32 {
    33     int mid=(left+right)/2;
    34     if(female[mid]==i)
    35     {
    36         SUM++;
    37         //book[mid]=1;
    38         return;
    39     }
    40     else if(left==mid)
    41     {
    42         if(female[right]==i)
    43         {
    44             SUM++;
    45             return;
    46         }
    47         else return;
    48     }
    49     else if(female[mid]<i)
    50         check(mid,right,i);
    51     else if(female[mid]>i)
    52         check(left,mid,i);
    53 }
  • 相关阅读:
    9 与python2交互
    8 内置函数(未完成)
    7 事务
    [转]jquery.vTicker(垂直滚动)
    2015年工作总结(2016-02-02)
    jQuery plugin : jqTransform
    JQuery知识总结
    JQuery事件处理的注意事项
    JQuery基本选择器
    [二]JQueryMobile常用的组件介绍
  • 原文地址:https://www.cnblogs.com/geek1116/p/5243121.html
Copyright © 2011-2022 走看看