zoukankan      html  css  js  c++  java
  • [ICPC2020南京L] Let's Play Curling

    [ICPC2020南京L] Let's Play Curling - 双指针

    Description

    给定长度为n的整数数组a,和长度为m的整数数组b,表示在一维数轴上有n个红点 (a[i]),和m个蓝点 (b[i]),给定一个实数c,对于每一个i,如果对于所有的j,都满足 (|c-a[i]|<|c-b[j]|),那么红队分数+1,现在你可以自定义c的值,计算红队可能获得的最大分数.

    Solution

    其实就是计算两个蓝点严格夹的区间中最多有多少个红点,双指针即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1e6 + 5;
    
    int n, m, a[N], b[N];
    
    void solve()
    {
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        for (int i = 1; i <= m; i++)
            cin >> b[i];
        sort(a + 1, a + n + 1);
        sort(b + 1, b + m + 1);
        a[0] = b[0] = -9e9;
        a[n + 1] = b[m + 1] = 9e9;
        int ans = 0;
        int pos = 1;
        for (int i = 1; i <= m + 1; i++)
        {
            // 可用区间 (b[i-1], b[i])
            int cnt = 0;
            while (a[pos] < b[i] && pos <= n)
            {
                cnt += a[pos] > b[i - 1];
                ++pos;
            }
            ans = max(ans, cnt);
        }
        if (ans)
            cout << ans << endl;
        else
            cout << "Impossible" << endl;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
        int t;
        cin >> t;
        while (t--)
            solve();
    }
    
  • 相关阅读:
    React学习笔记(六) Create React App
    React学习笔记(五) 状态提升
    React学习笔记(四) 条件渲染与列表渲染
    React学习笔记(三) 事件处理与表单元素
    React学习笔记(二) 组件
    React学习笔记(一) 入门
    React学习笔记
    Vue学习笔记
    Vue学习笔记(十二) Vue Ajax
    路飞_day2
  • 原文地址:https://www.cnblogs.com/mollnn/p/14588082.html
Copyright © 2011-2022 走看看