結果

問題 No.634 硬貨の枚数1
ユーザー bennkei0327
提出日時 2018-01-24 23:13:53
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 8 ms / 2,000 ms
コード長 1,110 bytes
コンパイル時間 778 ms
コンパイル使用メモリ 66,272 KB
最終ジャッジ日時 2025-01-05 07:53:10
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 75
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<iostream>
using namespace std;

class en{
  int N;
  int mine[100000];
  int ans;
  int MAX;
  int p;
public:
  en();
  void show();
  void max();
  void cal();
};

en::en()
{
  int n;
  cin >> n;
  N = n;
}

void en::max()
{
  int kane = 1;
  int j = 2;
  int i = 0;

  for(i = 0; ;i++){
    if(N < mine[i-1])
    {
      MAX = mine[i-2];
      p = i - 2;
      break;
    }

    mine[i] = kane;
    kane = kane + j;
    j++;
  }
}

void en::cal()
{
  int saihu;
  int P = p;
  saihu = N;
  int tmp, pre = 0;
  int i = 0;


  while(1){
    while(1){
      tmp = saihu - mine[P];
      if(tmp < 0){
        P = P-1;
      }
      else if(tmp > 0){
        pre++;
        saihu = saihu - mine[P];
      }
      else{
        pre++;
        break;
      }
      if(ans == pre){
        break;
      }
    }
    i++;
    if(i == 1) ans = pre;
    P = p - i;
    if(ans > pre) ans = pre;
    pre = 0;
    saihu = N;
    if(P == -1) break;
  }
}

void en::show()
{
  if(ans > 3){
    ans = 3;
  }
  cout << ans << "\n";
}


int main(){

  en kane;
  kane.max();
  kane.cal();
  kane.show();

  return 0;
}
0