ACM复习(18)8628 相亲
2018-01-28 15:54
260 查看
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
然后选择一个数组从头向尾扫描,另一个数组从尾向头扫描,当遇到匹配值则计数器加一,任意一个
数组扫描完成则输出结果。
在咱遥远破旧的小村庄,男女成婚仍是以古老的、传统的模式:相亲,合时辰八字,合得来则订婚,择日
成亲。其中最忽悠的则是合时辰八字,话说是月老决定,实则是根据某条公式,算是否合得来。通过多年
的明察暗访,终于让我知道合地辰八字的公式了。其规则如下:
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
解题思路
因为同性别的人的num值都不同并且以递增序给出,所以可以用两个数组分别存储不同性别的num值。然后选择一个数组从头向尾扫描,另一个数组从尾向头扫描,当遇到匹配值则计数器加一,任意一个
数组扫描完成则输出结果。
#include<stdio.h> int main() { int man[100002], woman[100002], index, index2, t, n, sum, sex, num, count; scanf("%d", &t); while(t --) { index = index2 = count = 0; scanf("%d %d", &n, &sum); for(int i = 0; i < n; i ++) { scanf("%d %d", &sex, &num); if(!sex) man[index ++] = num; else woman[index2 ++] = num; } index --; index2 --; // 从头向尾扫描 for(int i = 0; i <= index; i ++) { // 从尾向头扫描 while(1) { if(man[i] + woman[index2] <= sum) break; index2 --; } if(man[i] + woman[index2] == sum) { count ++; index2 --; } if(index2 < 0) break; } printf("%d\n", count); } return 0; }
相关文章推荐
- ACM复习(8)1143 多少个Fibonacci数
- [ACM] hdu 1465 不容易系列之一(错排复习)
- 8628 相亲
- 基础知识复习一(Jun18)
- ACM复习(24)8623 龙龙
- C/C++知识点复习笔记18/3/3
- [置顶] ACM复习专项
- ACM复习(43)10674 等差对
- 山东理工大学第七届ACM校赛-LCM的个数 分类: 比赛 2015-06-26 10:37 18人阅读 评论(0) 收藏
- 8628 相亲
- HDPCD-Java-复习笔记(18) - lab
- ACM复习(33)9504 面试
- Java复习笔记18【JDBC查询2】
- ACM复习(21)8626 原子量计数
- [ACM] POJ 1088 滑雪 (记忆化搜索复习)
- (暂时弃坑)(半成品)ACM数论之旅18---反演定理 第二回 Mobius反演(莫比乌斯反演)((づ ̄3 ̄)づ天才第一步,雀。。。。)
- ACM复习(11)8615 快乐
- java SE复习笔记18
- 算法复习18
- ACM复习(26)8635 气球