HOJ 2160
一道贪心(模拟)
每次用最长的和最短的匹配
如果能够装进
则装两个
否则只装一个最长的
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; inline int read(){ int x=0,f=1,ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int n,m,a[100005]; int main(){ while(scanf("%d",&n)!=EOF){ m=read(); for(int i=1;i<=n;i++) a[i]=read(); sort(a+1,a+1+n); int ans=0,l=1,r=n; while(l<=r){ if(a[l]+a[r]<=m) l++,r--; else r--; ans++; } printf("%d\n",ans); } return 0; }