

与えられた数列の部分和の最大値を求める問題でC++のqueueを使ったのですがACしません。元サイトのテストケースでは同じ出力が出るのですがatcoderでは半分がWAとなってしまいます。

[JOI2007A](https://www.ioi-jp.org/joi/2006/2007-ho-
prob_and_sol/2007-ho.pdf#page=2)

[code]

    #include <bits/stdc++.h>
    #define _GLIBCXX_DEBUG
    #define rep(i, n) for(int i=0; i < n; i++)
    #define reps(i, n) for(int i=1; i <= n; i++)
    #define INF 1e9
    #define ALL(v) v.begin(), v.end()
    
    using namespace std;
    using ll=long long;
    
    
    int main() {
      int n,k;
      cin >> n >> k;
      ll s=0;
      ll a;
    
      queue<int> q;
      rep(i,k){
        cin >> a;
        s += a;
        q.push(a);
      }
    
      ll ans=s;
      if(n>k){
        rep(i,n-k){
          cin >> a;
          s -= q.front();
          q.pop();
          s+=a;
          q.push(a);
          ans=max(ans,s);
        }
      }
      cout << ans;
    }
    
[/code]


CC BY-SA 4.0
2020-03-01T07:35:34.847
63468
2020-03-02T14:58:53.537
2020-03-02T14:58:53.537
19110
37627
question
c++
JOI2007 A問題で、アルゴリズムは合っていそうなのにテストケースの半分が通らない


metropolisさんも指摘している通り改行(std::endl)がないのが問題のように思われます。  
std::endlには改行のみではなくstd::basic_stream::flush()を呼び出す機能もあります。  
これを呼ばないと出力データがバッファにため込まれたまま標準出力に書き込まれません。  
そのため、プログラムがflushするかどうかはバッファに依存するので、運次第ではときどきWAとなるのではないでしょうか。


CC BY-SA 4.0
2020-03-02T14:38:04.907
63504
2020-03-02T14:38:04.907
37855
63468
answer