zoukankan      html  css  js  c++  java
  • L. Let's Play Curling

    思路

    通过对样例的模拟,发现答案为相邻两个蓝色石子中间最多的红色石子的数量。

    双指针做法:

    const int N=1e5+10;
    int a[N],b[N];
    int n,m;
     
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            cin>>n>>m;
     
            for(int i=0;i<n;i++) cin>>a[i];
            sort(a,a+n);
     
            for(int i=0;i<m;i++) cin>>b[i];
            b[m++]=0,b[m++]=INF;
            sort(b,b+m);
     
            int idx=0;
            int res=0;
            for(int i=0;i<m-1;i++)
            {
                int cnt=0;
                int l=b[i],r=b[i+1];
                while(idx < n && a[idx] <= l) idx++;
                while(idx < n && a[idx] > l && a[idx] < r)
                {
                    idx++;
                    cnt++;
                }
                res=max(res,cnt);
            }
     
            if(res == 0) puts("Impossible");
            else cout << res << endl;
        }
        //system("pause");
        return 0;
    }
    

    注意特判第一个蓝色石子前连续的红色石子数量,以及最后一个蓝色石子后连续的红色石子数量。

    map做法:

    const int N=1e5+10;
    int a[N],b[N];
    int n,m;
     
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            cin>>n>>m;
     
            map<int,char> pos;
            map<int,int> cnt;
     
            for (int i = 0; i < n; i++)
            {
                int x;
                cin >> x;
                pos[x] = 'r';
                cnt[x]++;
            }
     
            for (int i = 0; i < m; i++)
            {
                int x;
                cin >> x;
                pos[x] = 'b';
                cnt[x] = 0;
            }
     
            int res = 0;
            int sum = 0;
            for (auto &t : pos)
            {
                if(t.se == 'r') sum += cnt[t.fi];
                else sum=0;
                res = max(res, sum);
            }
     
            if(res == 0) puts("Impossible");
            else cout << res << endl;
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    多线程 介绍
    AE中如何获取曲线的一部分(转)
    friday
    THU
    MON
    SAT
    周三
    TUE
    绝对遗憾!
    monday
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14771653.html
Copyright © 2011-2022 走看看