1 solutions

  • 0
    @ 2025-11-5 14:59:18

    C :

    #include<stdio.h>
    #include<stdlib.h>
    int a[30001];
    int ans,w,len,l,r,n;
    int cmp(const void*a,const void*b)
    {
        int c=*(int*)a,d=*(int*)b;
        if (c<d) return -1;
        if (c>d) return 1;
        return 0;
    }
    int main()
    {
        scanf("%d%d",&w,&n);
        for (int i=1;i<=n;++i) scanf("%d",&a[i]);
        qsort(a,n+1,sizeof(int),cmp);
        int t=w-a[1];
        len=n;
        while (a[len]>t) --len;
        ans=n-len;
        l=1;r=len;
        while (l<=r)
              if (l==r)
              {
                       ++ans;
                       break;
              }
              else
              if (a[l]+a[r]<=w)
              {
                              ++ans;
                              ++l; --r;
              }
              else
              {
                  ++ans;
                  --r;
              }
        printf("%d\n",ans);
        return 0;
    }
    
    

    C++ :

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int a[30010];
    int main()
    {
        int n, w, count=0;
        cin>>w>>n;
        for (int i=0; i<n; i++)
            cin>>a[i];
        sort(a, a+n);
        for (int i=n-1, j=0; i>=j; i--)
        {
            if (a[i]==w) count++;
            else
            {
                if (a[i]+a[j]<=w)
                {
                    count++;
                    j++;
                }
                else count++;
            }
        }
        cout<<count<<endl;
        return 0;
    }
    
    
    • 1

    Information

    ID
    16301
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By