Блог пользователя Namritaansh02

Автор Namritaansh02, история, 3 года назад, По-английски

I get right answer in my program when this is the input:

1
8
465 55 3 54 234 12 45 78

however when I input this testcase along with others like below:

4
5
1 5 2 4 6
4
8 2 5 10
2
1000 2000
8
465 55 3 54 234 12 45 78

It shows uninitialized value error for the last test case. This is the problem statement.

Can anyone help with this?

This is my program:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair

void solve(){
    ll n;
    cin>>n;
    ll a[n+1],b[n];
    cin>>a[1];
    if(n<=2) {cout<<n<<"\n"; return;}
    for(int i=2;i<=n;i++){
        cin>>a[i];
        b[i-1]=abs(a[i]-a[i-1]);
    }
    ll mx=1,temp=1,t=b[1];
    for(int i=2;i<n;i++){
        if(__gcd(t,b[i])>1 && i!=n-1){
            t=__gcd(t,b[i]);
            temp++;
        }
        if(__gcd(t,b[i])==1){
            t=b[i];
            mx=max(mx,temp);
            temp=1;
            continue;
        }
        if(__gcd(t,b[i])>1 && i==n-1){
            temp++;
            mx=max(mx,temp);
        }
    } 
    cout<<mx+1<<endl;
}

int main(){
    ll tt=1;
    cin>>tt;
    while(tt--) solve();
}
  • Проголосовать: нравится
  • +6
  • Проголосовать: не нравится

»
3 года назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

The problem is this line if(n<=2) {cout<<n<<"\n"; return;}.

You have to read all the numbers before returning. Otherwise, the next test case will read previous values.

»
3 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

This is because you are returning value in case n<=2 without taking up the complete input so that input is taken up in the next test case.