greedy two pointers

Please click on ads to support us..

Python Code:

for _ in range(int(input())):
    n = int(input())
    x = list(map(int,input().split()))
    y = list(map(int,input().split()))
    t = []
    for i in range(n):
        t.append(y[i]-x[i])
    t.sort()
    teams = 0
    l = 0
    r = n-1
    while l<r:
        if t[r] + t[l] >=0:
            teams += 1
            r -= 1
        l += 1
    print(teams)
    
    
        



    

C++ Code:

#include <bits/stdc++.h>
#include <math.h>
#include <string.h>
#include <iomanip>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define pii pair<int, int>
#define rep(i, a, b) for (int i = a; i < b; i++)
#define rfor(i,a,b) for(int i=a; i>=b; i--)
#define in(a) int a; cin >> a;
#define ins(a) string a; cin >> a;
#define lin(a) long long a; cin>>a;
#define din(a) long double a; cin>>a;
#define out(a) cout<<a<<"\n";
#define arr(a,n) int a[n] = {}; rep(i,0,n) cin>>a[i];
#define ll long long
#define vec(v,n) vector<ll> v(n); rep(i,0,n) cin>>v[i];
#define all(a) a.begin(),a.end()
#define lite ios_base::sync_with_stdio(false); cin.tie(NULL);
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ld long double
#define tc  int t;cin>>t; while(t--)
#define mod 100000+7

void solve()
{
    lin(n);
    vec(x,n);
    vec(y,n);

    vector<int> ne,p,z;

    rep(i,0,n){
        int t=y[i]-x[i];
        if(t>0)
            p.push_back(t);
        else if(t<0)
            ne.push_back(t);
        else
            z.push_back(t);
    }

    sort(all(p));
    sort(all(ne));
    ll ans=0;
    if(p.size()==0){
        cout<<z.size()/2<<endl;
        return;
    }
    if(ne.size()==0){
        cout<<(p.size()+z.size())/2<<endl;
        return;
    }

    // ans+=t;

    int i=0,j=ne.size()-1;
    int b=0;
    while(i<p.size() && j>=0){
        if(-1*ne[j]<=p[i]){
            i++;
            j--;
            ans++;
        }
        else{
            b++;
            i++;
        }
    }

    ans += ((b + (p.size() - i)+ z.size()) / 2);

    cout<<ans<<endl;
    return;
}

int main()
{
    lite;

    tc
    solve();

    return 0;
}


Comments

Submit
0 Comments
More Questions

1450A - Avoid Trygub
327A - Flipping Game
411A - Password Check
1520C - Not Adjacent Matrix
1538B - Friends and Candies
580A - Kefa and First Steps
1038B - Non-Coprime Partition
43A - Football
50A - Domino piling
479A - Expression
1480A - Yet Another String Game
1216C - White Sheet
1648A - Weird Sum
427A - Police Recruits
535A - Tavas and Nafas
581A - Vasya the Hipster
1537B - Bad Boy
1406B - Maximum Product
507B - Amr and Pins
379A - New Year Candles
1154A - Restoring Three Numbers
750A - New Year and Hurry
705A - Hulk
492B - Vanya and Lanterns
1374C - Move Brackets
1476A - K-divisible Sum
1333A - Little Artem
432D - Prefixes and Suffixes
486A - Calculating Function
1373B - 01 Game