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

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

link to the problem https://codeforces.net/contest/1915/problem/E

my code

include <bits/stdc++.h>

using namespace std;

define int long long

signed main() { int t; cin >> t; while (t--) { int n; cin >> n; std::vector a(n+1);

unordered_map<int, int> sum_map;
    sum_map[0] = 1;  
    bool flag=false;
    int sum=0;

    for(int i = 1; i <= n; i++){
      cin >> a[i];
      if(i%2==0){
          a[i]=-a[i];
      }
      sum=sum+a[i];
      sum_map[sum]++;
      if(sum_map[sum]>1){
        flag =true;
        break;
      }
    }

    if(flag){
        cout << "YES\n";
    } else {
        cout << "NO\n";
    }
}

} why is tle coming in this and one more question when i am using the break in ok=true there as its been done why is still false coming ???? please help me

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

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

swap unordered_map to map

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

    but tle is less in unordered_map right..

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

      no, unordered_map is O(N) worst case and oftentimes on cf there are cases designed to trigger its worst case

      also even if that doesn't happen using unordered_map is a bad idea in cp because it's not that much faster than map + map offers a lot of other benefits like being sorted

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

        okay thank you .. but when i am using break after flag =true why is answer coming false still??