背景:比赛时明显小看了第一题的难度,就想的一心ac,结果wa了三次,!!!!!!比赛就乱了!!要稳住,多给时间看题!!!
思路:排序从最小的开始依次来减。但是要记录之前的位置,因为最终输出的是位置。我的记录方法是,把未排序之前的数组复制一份为sstr,对str排序之后,想要知道str中某个
#include<stdio.h> #include<algorithm> using namespace std; int main(void){ int n,k,str[105],ans[105],sstr[105]; while(scanf("%d",&n) != EOF){ scanf("%d",&k); for(int i = 0;i < n;i++) scanf("%d",&str[i]); for(int i = 0;i < n;i++) sstr[i] = str[i]; sort(str,str+n); int i = 0; for(int jj = n;jj > 0;jj--,i++){ if(k<=0) break; if(k-str[i]>=0){ for(int kk = 0;kk < n;kk++){ if(sstr[kk] == str[i]){ ans[i] = kk; sstr[kk]=0; break; } } k-=str[i]; }else break; } printf("%d\n",i); bool xx = false; for(int j = 0;j < i; j++){ if(j) printf(" "); printf("%d",ans[j]+1); xx = true; } if(xx) printf("\n"); } return 0; }
原文地址:http://blog.csdn.net/jibancanyang/article/details/43086073