为何最后一个点WA?

#include<cstdio>
#include<algorithm>
int n,w,ans=0,p[30000];
using namespace std;
int main()
{
scanf("%d",&w);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&p[i]);
sort(p+1,p+n+1);
int i=1,j=n;
while(i<=j)
{
if(i==j)
{
ans++;break;}
if(p[i]+p[j]<=w)
{
ans++;i++;j--;
}
else
{
while(p[i]+p[j]>w)
{
ans++;j--;
}
}
}
printf("%d\n",ans);
return 0;
}

3 条评论

  • @ 2016-09-13 18:42:02

    被楼主提醒了下- -用了个sort过了= =
    #include<bits/stdc++.h>
    using namespace std;
    bool use[30000];
    int main(){
    int w,n,ans=0;
    cin>>w>>n;
    int a[n];
    for(int i=0;i<n;i++){
    scanf("%d",&a[i]);
    }
    sort(a,a+n);
    for(int i=0;i<n;i++){
    if(!use[i]){
    use[i]=true;
    for(int j=n-1;j>0;j--){
    if(!use[j]&&w-a[j]-a[i]>=0){
    use[j]=true;
    break;
    }
    }
    ans++;
    }
    }
    cout<<ans;
    }

  • @ 2016-09-13 18:36:01

    我也是最后一个点:
    #include<bits/stdc++.h>
    using namespace std;
    bool use[30000];
    int main(){
    int w,n,ans=0;
    cin>>w>>n;
    int a[n];

    for(int i=0;i<n;i++){
    scanf("%d",&a[i]);
    }
    for(int i=0;i<n;i++){
    int waj=30001,temp=0;
    if(!use[i]){
    use[i]=true;
    for(int j=0;j<n;j++){
    if(!use[j]&&w-a[j]-a[i]>=0&&w-a[j]-a[i]<waj){
    temp=j;
    waj=w-a[j]-a[i];
    }
    }
    use[temp]=true;
    ans++;
    }
    }
    cout<<ans;
    }

  • @ 2014-07-16 15:11:43

    我看过数据了,输出一模一样的啊……

  • 1

信息

ID
1409
难度
4
分类
贪心 点击显示
标签
递交数
8081
已通过
3181
通过率
39%
被复制
25
上传者