背景:比賽時明顯小看了第一題的難度,就想的一心ac,結果wa了三次,!!!!!!比賽就亂了!!要穩住,多給時間看題!!!
思路:排序從最小的開始依次來減。但是要記錄之前的位置,因為最終輸出的是位置。我的記錄方法是,把未排序之前的數組復制一份為sstr,對str排序之後,想要知道str中某個
#include#include 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; }