配列を交互に足す 番兵の有効活用

降順に並んだ配列が二つあるとする.サイズは同じとは限らない.
配列を作るときに0を仕込んでおく。(番兵)

//0入れる前にa.size(), b.size()を確定させる.
a:  7  5  4  2   0
b:  8  3  1   0

//交互に足していって、stop以上になるときの最小の要素数を返す.
//例)20::7->8->5  ans = 3;  //8,7,3,5とやってしまうと、死亡。
//例)30::7->8->5->3->...1->2 ans = 7;
//例)31:: ans = -1;

以下、解答.

  if(a[0] >= stop || b[0] >= stop) {
    return 1;
  }
  int dst = 0;
  int ans = -1;
  for(int i = 0; i < min(a.size, b.size); ++i) {
    dst += a[0] + b[0];
    if(dst >= stop) {
      ans = (i+1)*2; break;
    }
    if(dst + a[i+1] >= stop || dst + b[i+1] >= stop) { 
//i+1でout_of_rangeしそうだが、番兵のおかげで0を足したことになり、計算がすっきりする.
      ans =  1+(i+1)*2; break;
    }
  }
  return ans;
}

これが一番簡単そう.
配列が二つしかないから、番兵を使わなくても条件分岐3つ位しておけばこれくらいなら何とかなりそうだけど、
n個の配列を……と考えるともう太刀打ちできなくなる.