Problem p02623 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std;

int main() {
  int n, m, k;
  scanf("%d %d %d", &n, &m, &k);
  long long nn[400001];
  long long mm[400001];
  for (int i = 0; i < n; i++) {
    int tmp;
    scanf("%d", &tmp);
    if (i == 0) {
      nn[i] = tmp;
    } else {
      nn[i] = nn[i - 1] + tmp;
    }
  }
  for (int i = 0; i < m; i++) {
    int tmp;
    scanf("%d", &tmp);
    if (i == 0) {
      mm[i] = tmp;
    } else {
      mm[i] = mm[i - 1] + tmp;
    }
  }
  int nMax = n;
  int nMin = m;
  long long *nMaxArray = nn;
  long long *nMinArray = mm;
  if (n < m) {
    nMax = m;
    nMin = n;
    nMaxArray = mm;
    nMinArray = nn;
  }
  int nCount = 0;
  int n1 = 0;
  int m2 = 0;
  int kk = 1;
  for (int i = -1; i < nMax; i++) {
    int tmp = i + 1;
    long long ans = k;
    if (i != -1) {
      ans = k - nMaxArray[i];
      if (ans < 0) {
        break;
      }
      if (tmp > nCount) {
        nCount = tmp;
      }
    }

    for (int j = nMin - kk; j >= 0; j--) {
      long long ans1 = ans - nMinArray[j];
      int tmp1 = tmp + j + 1;
      if (ans1 >= 0) {
        // printf("%d %d %lld\\n", ans1, j, nMinArray[j]);
        if (tmp1 > nCount) {
          nCount = tmp1;
        }
        break;
      }
      kk++;
    }
  }
  // while(n1 < n || m2 < m) {
  //     if(n1 >= n) {
  //         if((k-mm[m2]) >= 0) {
  //             nCount++;
  //             k = k - mm[m2];
  //             m2++;
  //         }
  //         else {
  //             break;
  //         }
  //     }
  //     else if(m2 >= m) {
  //         if((k-nn[n1]) >=0 ) {
  //             nCount++;
  //             k = k - nn[n1];
  //             n1++;
  //         }
  //         else {
  //             break;
  //         }
  //     }
  //     else {
  //         if(mm[m2] > nn[n1]) {
  //             if((k-nn[n1]) >=0 ) {
  //                 nCount++;
  //                 k = k - nn[n1];
  //                 n1++;
  //             }
  //             else {
  //                 break;
  //             }
  //         }
  //         else {
  //             if((k-mm[m2]) >= 0) {
  //                 nCount++;
  //                 k = k - mm[m2];
  //                 m2++;
  //             }
  //             else {
  //                 break;
  //             }
  //         }
  //     }

  // }
  printf("%d\\n", nCount);
  return 0;
}

Error: TLE

Fixed submission:

#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std;

int main() {
  int n, m, k;
  scanf("%d %d %d", &n, &m, &k);
  int nn[400001];
  int mm[400001];
  for (int i = 0; i < n; i++) {
    int tmp;
    scanf("%d", &tmp);
    if (i == 0) {
      nn[i] = tmp;
    } else {
      nn[i] = nn[i - 1] + tmp;
    }
  }
  for (int i = 0; i < m; i++) {
    int tmp;
    scanf("%d", &tmp);
    if (i == 0) {
      mm[i] = tmp;
    } else {
      mm[i] = mm[i - 1] + tmp;
    }
  }
  int nMax = n;
  int nMin = m;
  int *nMaxArray = nn;
  int *nMinArray = mm;
  if (n < m) {
    nMax = m;
    nMin = n;
    nMaxArray = mm;
    nMinArray = nn;
  }
  int nCount = 0;
  int n1 = 0;
  int m2 = 0;
  for (int i = -1; i < nMax; i++) {
    int tmp = i + 1;
    int ans = k;
    if (i != -1) {
      ans = k - nMaxArray[i];
      if (ans < 0) {
        break;
      }
      if (tmp > nCount) {
        nCount = tmp;
      }
    }

    for (int j = 0; j < nMin; j++) {
      int ans1 = ans - nMinArray[j];
      if (ans1 < 0) {
        break;
      }
      int tmp1 = tmp + j + 1;
      if (tmp1 > nCount) {
        nCount = tmp1;
      }
    }
  }
  // while(n1 < n || m2 < m) {
  //     if(n1 >= n) {
  //         if((k-mm[m2]) >= 0) {
  //             nCount++;
  //             k = k - mm[m2];
  //             m2++;
  //         }
  //         else {
  //             break;
  //         }
  //     }
  //     else if(m2 >= m) {
  //         if((k-nn[n1]) >=0 ) {
  //             nCount++;
  //             k = k - nn[n1];
  //             n1++;
  //         }
  //         else {
  //             break;
  //         }
  //     }
  //     else {
  //         if(mm[m2] > nn[n1]) {
  //             if((k-nn[n1]) >=0 ) {
  //                 nCount++;
  //                 k = k - nn[n1];
  //                 n1++;
  //             }
  //             else {
  //                 break;
  //             }
  //         }
  //         else {
  //             if((k-mm[m2]) >= 0) {
  //                 nCount++;
  //                 k = k - mm[m2];
  //                 m2++;
  //             }
  //             else {
  //                 break;
  //             }
  //         }
  //     }

  // }
  printf("%d\\n", nCount);
  return 0;
}