您的位置:首页 > 其它

URAL1901贪心

2014-07-19 20:17 169 查看
原题http://acm.timus.ru/problem.aspx?space=1&num=1901
//此题感谢一个总是爆我照的人,他的一句话,让我顿悟

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <limits.h>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <ctype.h>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
using namespace std;
#define N 111111
int a
,b
,t
;

int main(){
int n,s;
int i;

while(~scanf("%d%d",&n,&s)){
memset(t,0,sizeof(t));
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
int cot = 0;
int l = 0;
int r = n-1;
while(l < r){
if(a[l]+a[r] > s){
t[cot++] = a[l++];
t[cot++] = a[r--];
}
else{
t[cot++] = a[l++];//如果最小的和最大的相加都小于s,那么最小的就一定要和一个相连。那么就和次小的相连
t[cot++] = a[l++];
}
}
if(l == r){
t[cot++] = a[l];
}
int sum=0;
for(i=0;i<cot;i++){
if(t[i]+t[i+1] <= s){
sum++;
i++;
}
else{
sum++;
}
}
printf("%d\n",sum);
for(i=0;i<n;i++){
if(i != n-1)
printf("%d ",t[i]);
else
printf("%d\n",t[i]);
}

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: