2 条题解

  • 1

    诏曰

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int n,w,i,ans=0;
    	cin>>n>>w;
    	int a[n]={};
    	for(i=0;i<n;i++)
    	cin>>a[i];
    	sort(a,a+n);//从小到大排序
    	for(i=0;i<n;i++){
    		if(a[i]<=w) ans++;
    		else break;
    	}//排完序列中可单个出来的石子
    	int left=0,right=n-1;
    	while(right>left){//要学会想象,自然而明
    		if(a[left]+a[right]<=w){
    			ans--;
    		    left++;
    		    right--;
    		}
    		else right--;
    		if(a[left]>=w) break;
    	}
    	cout<<ans;
        return 0;
    }
    
    • 0
      @ 2024-12-22 13:24:55

      @OIER大牛小艾,既然你这么喜欢玩石头,那来vanvan姐姐的大要石如何!呱!我要震碎你的后槽牙口牙!no也没用

      #include<bits/stdc++.h>
       using namespace std; 
      int a[1010];
       int main() 
      {
       int m,w,s=0; 
      cin>>m>>w; 
      for(int i=1;i<=m;i++) 
           cin>>a[i];
       sort(a,a+m+1);//sort这里面的是地址,这样写会排序两个地址之间的所有数据
       int \*p,\*l;//用了指针
       p=&a[1];l=&a[m]; 
      for(;l>=p;l--)
      { 
      if(\*l<=w) 
       {  
      s++;
       if(\*p+\*l<=w)//和最小的相加小于w的堆一起,不能的只能单独算一堆
          { 
          p++; 
           }
         } 
      } 
      cout<<s; return 0; }
      
      • 1

      信息

      ID
      800
      时间
      1000ms
      内存
      256MiB
      难度
      9
      标签
      (无)
      递交数
      86
      已通过
      4
      上传者