2 条题解

  • 0
    @ 2025-10-8 17:10:55
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int a[N],f[N];
    int main()
    {
        int n,k;scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        sort(a+1,a+n+1);a[n+1]=2e9+10;
        int ans=0;
        memset(f,0,sizeof(f));
        for(int l=1,r=1,t1=0,t2=0;l<=n;l++)
        {
            while(a[l]+k>=a[r+1])r++;
            f[r]=max(f[r],r-l+1);
            t1=max(t1,f[l-1]);
            ans=max(ans,t1+r-l+1);
        }
        printf("%d\n",ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 17:10:43
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e5+10;
      int a[N],f[N];
      int main()
      {
          int n,k;scanf("%d%d",&n,&k);
          for(int i=1;i<=n;i++)scanf("%d",&a[i]);
          sort(a+1,a+n+1);a[n+1]=2e9+10;
          int ans=0;
      	memset(f,0,sizeof(f));
          for(int l=1,r=1,t1=0,t2=0;l<=n;l++)
          {
              while(a[l]+k>=a[r+1])r++;
              f[r]=max(f[r],r-l+1);
              t1=max(t1,f[l-1]);
              ans=max(ans,t1+r-l+1);
          }
          printf("%d\n",ans);
          return 0;
      }
      • 1

      *【双指针】最大化两个K紧凑集合[USACO16OPEN] Diamond Collector S

      信息

      ID
      6247
      时间
      1000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      21
      已通过
      13
      上传者