結果
問題 |
No.115 遠足のおやつ
|
ユーザー |
![]() |
提出日時 | 2016-10-31 10:57:11 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 776 bytes |
コンパイル時間 | 795 ms |
コンパイル使用メモリ | 63,360 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2025-01-03 01:15:54 |
合計ジャッジ時間 | 2,051 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 40 |
ソースコード
#include<iostream> #include<vector> using namespace std; int mySum(int m){ return (m)*(m+1)/2; } int main(){ int N, D, K; cin>> N>> D>> K; int mi=mySum(K); int ma=mySum(N)-mySum(N-K); if(!(mi<=D&&D<=ma)){ cout<< -1<< endl; return 0; } int s=0, k=0; vector<int> ans; for(int n=1; n<=N; n++){ int maS=mySum(N)-mySum(N-K+(k+1));// (nを選ぶとして、)後ろから(K-(k+1)))個の和(大きい) if(n+s+maS>=D){// n+今まで+これからの最大>=D? ans.push_back(n); s+=n; k++; } if(k==K) break; } for(int i=0; i<K; i++){ if(i>0){ cout<< " "; } cout<< ans[i]; } cout<< endl; return 0; }