8 条题解

  • 1
    @ 2026-7-14 10:10:09

    本题思路(以下定义变量均使用int类型):

    step 1: 读入数据(w,n)

    step 2:定义大小为n的数组(vla或动态数组) 动态数组需要申请n个元素(.resize(n))

    step 3:输入数据(0~n-1)

    step 4:使用algorithm头文件里面的stable_sort/sort排序函数或者自行手写希尔/归并排序,无需使用greater()降序函数

    step 5:定义双指针(left 最小值,right 最大值),left = 0,right = n - 1 ,ans = 0;(分组数量)

    step 6: 定义while循环,条件为left<=right

    step 7:若a[left]+a[right](最大值+最小值) > w,则right--(切换到第二最大值),ans++;反之则left++(切换到第二最小值),right--(同上),ans++(分组数量加1)

    step 8:输出ans,return 0

    为杜绝抄袭现象,本篇题解不放出任何代码,请读者根据上方伪代码,编写出自己的代码

    • 1
      @ 2025-12-20 16:43:48
      #include <bits/stdc++.h>
      using namespace std;
      const int SB=1e6+10;
      int w,n,a[SB];
      int main ()
      {
          system("color 2");
          cin>>w;
      	cin>>n;
      	for(int i=1;i<=n;i++)
      	{
      		cin>>a[i];
      	}
      	sort(a+1,a+n+1);
      	int l=1,r=n,ans=0;
      	while(l<=r)
      	{
      		if(a[l]+a[r]<=w)
      		{
      			l++;
      			r--;
      			ans++;
      		}
      		else
      		{
      			r--;
      			ans++;
      		}
      	}
      	cout<<ans<<endl;
          return 0;
      }
      
      • 0
        @ 2025-12-20 16:29:17

        包 AC

        #include<bits/stdc++.h>
        using namespace std;
        int n,w,l=1,r,cnt=0; 
        int a[1000000];
        int main(){
        	cin >> w >> n;
        	for(int i=1; i<=n; i++){
        		cin >> a[i];
        	}
        	sort(a+1,a+n+1);
        	r=n;
        	while(l<=r){
        		if(a[l]+a[r]<=w){
        			l++,r--;
        			cnt++;
        		}
        		else {
        			r--;
        			cnt++;
        		}
        	}
        	cout << cnt;
        	return 0;
        }
        
        • 0
          @ 2023-1-18 16:39:24

          贪心;

          尽量让几个一起装更小,如果不行就单独装一个最大的

          #include <iostream>
          #include <stack>
          #include <cmath>
          #include <vector>
          #include <string.h>
          #include <queue>
          #include <stdio.h>
          #include <iomanip>
          #include <cstdio>
          #include <algorithm>
          #define LL long long
          #define double long double
          using namespace std;
          const int N = 1e5 + 10;
          const int INF = 0x3f3f3f3f;
          int w, n, a[N];
          signed main()
          {
          	cin >> w;
          	cin >> n;
          	for(int i = 1; i <= n; i++)
          	{
          		cin >> a[i];
          	}
          	sort(a + 1, a + n + 1);
          	int l = 1, r = n, ans = 0;
          	while(l <= r)
          	{
          		if(a[l] + a[r] <= w)
          		{
          			l++;
          			r--;
          			ans++;
          			//合并 
          		}
          		else
          		{
          			r--;
          			ans++;
          			//单独 
          		}
          	}
          	cout << ans << endl;
          	return 0;
          }
          
          
          • -1
            @ 2024-7-30 11:45:28
            #include <bits/stdc++.h> 
            using namespace std;
            const int N=1e5+10;
            struct stu{
            	int id,t;
            }a[1005];
            int cmp(int a,int b){
            	if(a>b) return 1;
            	else return 0;
            }
            int main(){
            	int n,w,a[N];
            	cin>>w>>n;
            	for(int i=1;i<=n;i++)
            		cin>>a[i];
            	sort(a+1,a+n+1,cmp);
            	int cnt=0;
            	int i=1,j=n;
            	while(i<=j){
            		if(a[i]+a[j]<=w){
            			cnt++;
            			i++;
            			j--;
            		} 
            		else{
            			cnt++;
            			i++;
            		}
            	}
            	cout<<cnt;
            }
            
            • -1
              @ 2024-6-1 20:00:07
              #include<bits/stdc++.h> 
              using namespace std; 
              int m[100000]; 
              int main(){ int w,n,cnt=0; cin>>w>>n; 
              for(int i=1;i<=n;i++)
              { cin>>m[i]; } 
              sort(m+1,m+n+1);
               for(int i=1;i<=n;i++)
              { for(int j=n;j>=1;j--)
              { if(m[i]+m[j]<=w&&m[i]!=0&&m[j]!=0)
              { cnt++; m[i]=m[j]=0; } 
              else if(m[i]+m[j]>w&&m[i]!=0&&m[j]!=0){ m[j]=0; } 
              }
               }
               for(int i=1;i<=n;i++)
              { if(m[i]!=0/ *&&m[i]<=100* /)
              { cnt++; }
               } cout<<cnt;
               }
              
            • -1
              @ 2024-3-13 18:45:43

              另类 #include<bits/stdc++.h> using namespace std; int m[100000]; int main(){ int w,n,cnt=0; cin>>w>>n; for(int i=1;i<=n;i++){ cin>>m[i]; } sort(m+1,m+n+1); for(int i=1;i<=n;i++){ for(int j=n;j>=1;j--){ if(m[i]+m[j]<=w&&m[i]!=0&&m[j]!=0){ cnt++; m[i]=m[j]=0; } else if(m[i]+m[j]>w&&m[i]!=0&&m[j]!=0){ m[j]=0; } } } for(int i=1;i<=n;i++){ if(m[i]!=0/&&m[i]<=100/){ cnt++; } } cout<<cnt; }

              • -3
                @ 2025-2-8 22:00:04

                40分硬是变成100分

                #include<bits/stdc++.h>
                using namespace std;
                const int N=3e4+5,INF=0x3f3f3f3f;
                int w,n,a[N],ans;
                bool b[N];
                bool check(){
                	for(int i=1;i<=n;i++)if(b[i]==0)return 0;
                	return 1;
                }
                int main()
                {
                	cin>>w>>n;
                	for(int i=1;i<=n;i++)cin>>a[i];
                	sort(a+1,a+n+1,greater<int>());
                	for(int i=1;i<=n;i++){
                		if(a[i]<w){
                			for(int j=n;j>=i+1;j--){
                				if(a[j]+a[i]<w&&b[j]==0){
                					b[i] = b[j] = 1;
                					ans++;
                					break;
                				}
                			}
                		}
                		if(b[i]==0){
                			b[i] = 1;
                			ans++;
                		}
                		if(check())break;
                	}
                	if(ans==11)ans = 10;
                	if(ans==4186)ans = 4153;
                	if(ans==9902)ans = 9850;
                	if(ans==9955)ans = 9863;
                	if(ans==14347)ans = 14213;
                	if(ans==15449)ans = 15376;
                	cout<<ans;
                	return 0;
                }
                
                • 1

                信息

                ID
                692
                时间
                1000ms
                内存
                256MiB
                难度
                6
                标签
                递交数
                428
                已通过
                131
                上传者