結果
| 問題 | 
                            No.944 煎っぞ!
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2019-12-07 23:14:15 | 
| 言語 | C++17  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 29 ms / 3,000 ms | 
| コード長 | 873 bytes | 
| コンパイル時間 | 597 ms | 
| コンパイル使用メモリ | 62,548 KB | 
| 最終ジャッジ日時 | 2025-01-08 09:38:14 | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 35 | 
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:22:15: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   22 |   int n; scanf("%d", &n);
      |          ~~~~~^~~~~~~~~~
main.cpp:26:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   26 |     scanf("%d", &a[i]);
      |     ~~~~~^~~~~~~~~~~~~
            
            ソースコード
#include <algorithm>
#include <cstdint>
#include <cstdio>
#include <vector>
using namespace std;
using i64 = int64_t;
vector<i64> divisors(i64 x) {
  vector<i64> v;
  for(i64 d=1; d*d<=x; ++d) {
    if(x % d == 0) {
      v.push_back(d);
      v.push_back(x/d);
    }
  }
  sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end());
  reverse(v.begin(), v.end());
  return v;
}
int main(void) {
  int n; scanf("%d", &n);
  vector<int> a(n);
  i64 acc = 0;
  for(int i=0; i<n; ++i) {
    scanf("%d", &a[i]);
    acc += a[i];
  }
  vector<i64> divs = divisors(acc);
  for(i64 &div : divs) {
    i64 X = acc / div;
    i64 cur = 0;
    bool ok = true;
    for(int i=0; i<n; ++i) {
      cur += a[i];
      if(cur  > X) { ok = false; break; }
      if(cur == X) { cur = 0; }
    }
    if(ok) {
      printf("%ld\n", div);
      return 0;
    }
  }
  return 0;
}