8628 相亲
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
思路:由于每个人的num是递增顺序给出的,对于男、女这两个序列,一个从上往下,一个从下往上,若满足和为sum,继续
若 和>sum,从下往上的继续往上移动一个(从上往下的不动)
若 和《sum,从上往下的继续往下移动一个(从下往上的不动)

#include<stdio.h> #include<string.h> int a[100010],b[100010],c[100010]; int main() { int i,j,k,t,t1,t2,num,n,count,T; scanf("%d",&T); for(i=1; i<=T; i++)//循环次数 { j=k=t=1; count=0; scanf("%d%d",&n,&num); for(t=1; t<=2*n; t=t+2)//预处理,把1的存放在a,0存放在b { scanf("%d%d",&c[t],&c[t+1]); if(c[t]) a[j++]=c[t+1]; else b[k++]=c[t+1]; } t1=1; t2=k-1; while(t1<j&&t2>=1)//a下标从1开始,b从末尾开始(k-1) { if(a[t1]+b[t2]==num) { count++; t1++; t2--; } else if(a[t1]+b[t2]>num) { t2--; } else { t1++; } } printf("%d\n",count); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧