看看这是什么问题
  • 板块P1102 A-B 数对
  • 楼主tcdthz
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/1/2 01:00
  • 上次更新2024/1/2 16:23:54
查看原帖
看看这是什么问题
671205
tcdthz楼主2024/1/2 01:00

为什么这个代码能ac:

#include <bits/stdc++.h>
using namespace std;
int a[1000010];
unordered_map<int,int>mp;
signed main()
{
   long long res=0;
    int n,c;
    cin>>n>>c;
    for (int i = 1; i <= n; i ++ ) cin>>a[i];
    sort(a+1,a+n+1);
    for (int i = 1; i <= n; i ++ )
    {
        int k=a[i]+c;
        int l=i+1,r=n,mid;
        while(l<r)
        {
            mid=(l+r)>>1;
            if(a[mid]>=k) r=mid; else l=mid+1;
        }
        if(k==a[l])
        mp[a[l]]++;
    }
    for (int i = 1; i <= n; i ++ ) if(mp[a[i]]>0) res+=mp[a[i]];
    cout<<res;
}

这个代码只能ac第3个的样例:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[1000010];
unordered_map<int,int>mp;
signed main()
{
    int n,c,res=0;
    cin>>n>>c;
    for (int i = 1; i <= n; i ++ ) cin>>a[i];
    
    for (int i = 1; i <= n; i ++ )
    {
        int k=a[i]+c;
        int l=i,r=n,mid;
        while(l<r)
        {
            mid=(l+r)>>1;
            if(a[mid]>=k) r=mid; else l=mid+1;
        }
        if(k==a[l])
        mp[a[l]]++;
    }
    for (int i = 1; i <= n; i ++ ) if(mp[a[i]]>0) res+=mp[a[i]];
    cout<<res;
}

这个代码能ac除第3个样例的所有样例:

#include <bits/stdc++.h>
using namespace std;

int a[1000010];
unordered_map<int,int>mp;
signed main()
{
    int n,c,res=0;
    cin>>n>>c;
    for (int i = 1; i <= n; i ++ ) cin>>a[i];
    sort(a+1,a+n+1);
    for (int i = 1; i <= n; i ++ )
    {
        int k=a[i]+c;
        int l=i+1,r=n,mid;
        while(l<r)
        {
            mid=(l+r)>>1;
            if(a[mid]>=k) r=mid; else l=mid+1;
        }
        if(k==a[l])
        mp[a[l]]++;
    }
    for (int i = 1; i <= n; i ++ ) if(mp[a[i]]>0) res+=mp[a[i]];
    cout<<res;
}
2024/1/2 01:00
加载中...