CodeForces 1333-C Eugene y una matriz (la suma del subintervalo es 0, la suma del prefijo)

 

http://codeforces.com/contest/1333/problem/C

 

 

 

 

Significado áspero:

Si un subintervalo, la suma de cualquiera de sus subintervalos no es 0, entonces es bueno, encuentre el número de tales subintervalos

 

1 #include <bits / stdc ++. H>
 2 typedef largo  largo LL;
3  const  int INF = 0x3f3f3f3f ;
4  const  doble eps = 1e- 8 ;
5  const  int mod = 1e8;
6  const  int maxn = 2e5 + 10 ;
7  usando el  espacio de nombres estándar;
8  
9 mapa <LL, LL> mp;
10  
11  int main ()
 12  {
 13      #ifdef DEBUG
 14     freopen ( " sample.txt " , " r " , stdin);
 15      #endif 
16      
17      int n;
 18      scanf ( " % d " , & n);
 19      LL pos = 1 ; // Registre el último intervalo y Cuando la posición es 0, la posición inicial es 1 (el número 0 se inserta en la posición 1) 
20      LL sum = 0 ; // prefijo y 
21      LL ans = 0 ;
 22      mp [ 0 ] = 1 ; // el número 0 se inserta en la posición 1 
23      para ( inti = 2 ; i <= n + 1 ; i ++) // equivalente a sumar un número 0 en el frente, por lo que el número es todo +1 
24      {
 25          int x;
 26          scanf ( " % d " , & x);
 27          sum + = X;
 28          IF (mp.count (SUM))
 29          {
 30              POS = max (POS, MP [SUM]);
 31 es              ANS = + I- (POS + . 1 ) + . 1 - . 1 ; // -1 debido a que el intervalo [ La suma de pos + 1, i] es 0, para restar este intervalo 
32          }
 33          más ans + = i- (pos +1 ) + 1 ; // Agregar intervalo [pos + 1, i], [pos + 2, i], [pos + 3, i] ... [i, i] 
34          mp [sum] = i;
 35      }
 36      printf ( " % lld \ n " , ans);
 37      
38      devuelve  0 ;
 39 }

 

 

 

 

 

 

 

 

-

Supongo que te gusta

Origin www.cnblogs.com/jiamian/p/12664197.html
Recomendado
Clasificación