Lovers

题目
One day n girls and n boys come to Xi’an to look for a mate . Each girl has a value a[i] , each boy has a value b[i]b[i]b[i] . Girl iii and boy j will fall in love only if a[i]+b[j]≥k .Please help them make pairs as many as possible .
Input
Several test cases .
First line an integer T (1≤T≤10) . Indicates the number of test cases.
Then T test cases follows . Each test case begins with two integer N, K (1≤N≤200000,0≤K≤10e+9).The next line has N integers indicate a[1] to a[N] (0≤a[i]≤10e+9) . The next line has N integers indicate b[1] to b[N] (0≤b[i]≤10e+9)
Output
For each test case , print the answer in a single line.
样例输入
1
3 4
1 2 3
1 2 3
样例输出
3
题目大意
就是有n个男生和n个女生,他们每个人身上都有一个魅力值,如果一个男生和一个女生的魅力值之和大于等于K,那么他们俩就能在一起。问给出男女生的魅力值,最多能有多少男女成为情侣。
解题思路
把男女的魅力值排序,然后用第一个女生的魅力值跟最后一个男生相加求和,如果不满足条件,女生不动,再用上一个男生相加,以此类推,直到找出为止。
注意:不能用双重循环会超时

//超时!!!
 for(int i=1;i<=n;i++)
  for(int j=n;j>=1;j--)
  {
  	 if(a[i]+b[j] >=k)
  	 {
   	 ans++;
   	 a[i]=b[i]=0
   	}
   }
//AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=200003;
int main()
{
 int t,n,k;
 int a[maxn],b[maxn];
 cin >>t;
 while(t--)
 {
  cin >>n>>k;
  for(int i=1;i<=n;i++)
  {
   cin>>a[i];
  }
  for(int i=1;i<=n;i++)
  {
   cin>>b[i];
  }
  int ans=0;
  sort(a+1,a+1+n);
  sort(b+1,b+1+n); 
  int j = n;       
  for (int i =1; i <=n; i++)    
  {            
   if(a[i]+b[j]>=k)
      {             
       j--;     
       ans++;        
   }
  }
  cout <<ans<<endl;
 }
 return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值