#37769: C++答案


samlin961112@gmail.com (林哲甫)

學校 : 新北市私立南山高級中學
編號 : 220506
來源 : [123.252.121.18]
最後登入時間 :
2024-11-21 19:33:28
d875. 4. 窮舉的階梯問題 -- 國立台灣師範大學 | From: [219.70.213.92] | 發表日期 : 2023-10-05 22:21

先盡量把數字堆高像是1 2 3 2 1,然後再慢慢湊成正確數字

code

 

#include <bits/stdc++.h>
using namespace std;
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  while (cin >> n) {
    vector<int> ans;
    int max = int(pow(n, 0.5));
    int rest = n - max * max;
    for (int i = 1; i < max + 1; i++) {
      ans.push_back(i);
      if (i == rest) {
        ans.push_back(i);
      }
    }
    for (int i = max - 1; i > 0; i--) {
      ans.push_back(i);
    }
    int all;
    all=accumulate(ans.begin(), ans.end(), 0);
    while(all<n){
      auto big=max_element(ans.begin(), ans.end());
      
      for(int i=big-ans.begin();i>=0;i--){
        if(ans[i]<=n-all){
          ans.insert(ans.begin()+i, ans[i]);
          all+=ans[i];
          break;
        }
      }
    }
    for(int i=0;i<ans.size();i++){
      cout<<ans[i]<<' ';
    }
    cout<<'\n';
  }
}

 
ZeroJudge Forum