Вопрос SPREAD2 задан в Snackdown'19 вызов кодекса:
Есть N человек, пронумерованных от 1 до N. Первоначально только человек 1 знает о Snackdown.Каждый день каждый, кто уже знает о Snackdown, рассказывает об этом другим людям.Для каждого действительного я, человек, я могу сказать до Ai людей в день.Люди распространяют информацию среди людей, которые не знают о Snackdown, в порядке возрастания их индексов;Вы можете предположить, что никакие два человека не пытаются рассказать кому-то об Snackdown одновременно.Каждому человеку разрешено начинать рассказывать другим людям о Закусках с того дня, когда он узнает об этом (человек 1 может начать рассказывать другим людям уже в первый день).Сколько дней нужно, чтобы все люди узнали о Snackdown?
Input : первая строка ввода содержит одно целое число T, обозначающее количество тестовых случаев.Описание Т-тестов приведено ниже.Первая строка каждого тестового примера содержит одно целое число N. Вторая строка содержит N разделенных пробелом целых чисел A1, A2,…, AN.
Выходные данные : для каждого тестового примера выведитеодна строка, содержащая одно целое число - количество дней.
Один код для этого вопроса показывает ошибку времени выполнения, а второй работает отлично.Спрашивается в квалификационном раунде Snakedown'19.Поскольку конкурс окончен, я хочу уточнить, почему этот код показывает ошибку времени выполнения
#include<bits/stdc++.h>
using namespace std;
int main() {
int t,s;
int n;
cin>>t;
int count;
while(t--) {
count=0;
cin>>n;
int B[1000009];
cin>>B[0];
for (int i = 1; i < n; ++i) {cin>>s;B[i]=B[i-1]+s;}
for(int i=1;i<n;i+=B[i-1]) {
count++;
}
cout<<count<<'\n';
}
return 0;
}
при выполнении с циклом while в этот код
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
int q;
ll n;
ll s;
ll B[1000005];
ll l,count;
cin>>q;
while(q--) {
l=1;
count=0;
cin>>n;
cin>>B[0];
for(int i=1;i<n;i++) {
cin>>s;
B[i] = B[i-1]+s;
}
while(l<n) {
count++;
l+=B[l-1];
}
cout<<count<<"\n";
}
return 0;
}
Похоже, работает правильно.Пожалуйста, помогите.