题解 | #Let'sPlayCurling#

LetsPlayCurling

https://ac.nowcoder.com/acm/problem/216012

1、a[N]保存所有红色石头的位置,用b[N]保存所有蓝色石头的位置
2、对a[N]和b[N]都进行sort排序
3、遍历每两个相邻蓝色石头之间有多少个红色石块,最多的那个即为答案
4、需要注意的是第一个蓝色石头之前的所有红色石块也可以是答案,最后一块蓝队石头之后的红色石头也可以是答案

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+10;
int n,m,res,T;
int a[N],b[N];
signed main()
{
    cin>>T;
    while(T--)
    {
        res=0;
        cin>>n>>m;
        for(int i=1;i<=n;i++) cin>>a[i];
        for(int j=1;j<=m;j++) cin>>b[j];
        sort(a+1,a+n+1);
        sort(b+1,b+n+1);
        b[0] = 0; // 添加虚拟的蓝色石头,第一块蓝色石头之前的所有红色石块也可以是答案
        b[m+1] = 1e9+1; // 添加虚拟的蓝色石头,最后一块蓝色石头之后的红色石头也可以是答案
        for(int i=0;i<=m;i++) // 遍历每两个蓝色石头之间有多少个红色石块,保留最多的那个即为答案
        {
            int l=upper_bound(a+1,a+n+1,b[i])-a;
            int r=lower_bound(a+1,a+n+1,b[i+1])-a;
            res=max(res,r-l);
        }
        if(res==0) cout<<"Impossible"<<endl;
        else cout<<res<<endl;
    }
}
全部评论
理解题目意思这题就很容易了
1 回复 分享
发布于 2023-08-05 11:29 江西
破案了,你代码sort b的那块写成了n。 雷姆。
点赞 回复 分享
发布于 2024-08-12 12:56 山东
可惜现在过不了了。
点赞 回复 分享
发布于 2024-08-12 12:40 山东
四篇题解还是你最简洁优秀
点赞 回复 分享
发布于 2023-08-25 10:49 湖南

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
08-07 14:45
点赞 评论 收藏
分享
真三hjdlxn:这么能吹还能找不到实习啊? 市分行写TOP投行,2个月的实习写半页。
点赞 评论 收藏
分享
吴offer选手:上海交通大学 这几个字可以用
点赞 评论 收藏
分享
评论
7
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务