File tree Expand file tree Collapse file tree 2 files changed +83
-0
lines changed
Expand file tree Collapse file tree 2 files changed +83
-0
lines changed Original file line number Diff line number Diff line change 1+ const input = require ( "fs" )
2+ . readFileSync (
3+ process . platform === "linux"
4+ ? "/dev/stdin"
5+ : require ( "path" ) . join ( __dirname , "input.txt" ) ,
6+ "utf8"
7+ )
8+ . toString ( )
9+ . trim ( )
10+ . split ( "\n" ) ;
11+
12+ function solution ( input ) {
13+ const [ N , M ] = input [ 0 ] . split ( " " ) . map ( Number ) ;
14+ const an = input [ 1 ] . split ( " " ) . map ( Number ) ;
15+
16+ const count = Array ( M ) . fill ( 0 ) ;
17+ let sum = 0 ;
18+ let result = 0 ;
19+
20+ count [ 0 ] = 1 ;
21+
22+ for ( let i = 0 ; i < N ; i ++ ) {
23+ sum = ( sum + an [ i ] ) % M ;
24+
25+ if ( sum < 0 ) sum += M ;
26+
27+ result += count [ sum ] ;
28+ count [ sum ] ++ ;
29+ }
30+
31+ return result ;
32+ }
33+
34+ console . log ( solution ( input ) ) ;
Original file line number Diff line number Diff line change 1+ const input = require ( "fs" )
2+ . readFileSync (
3+ process . platform === "linux"
4+ ? "/dev/stdin"
5+ : require ( "path" ) . join ( __dirname , "input.txt" ) ,
6+ "utf8"
7+ )
8+ . trim ( )
9+ . split ( "\n" ) ;
10+
11+ function lowerBound ( arr , target ) {
12+ let left = 0 ,
13+ right = arr . length ;
14+ while ( left < right ) {
15+ const mid = Math . floor ( ( left + right ) / 2 ) ;
16+ if ( arr [ mid ] >= target ) right = mid ;
17+ else left = mid + 1 ;
18+ }
19+ return left ;
20+ }
21+
22+ function upperBound ( arr , target ) {
23+ let left = 0 ,
24+ right = arr . length ;
25+ while ( left < right ) {
26+ const mid = Math . floor ( ( left + right ) / 2 ) ;
27+ if ( arr [ mid ] > target ) right = mid ;
28+ else left = mid + 1 ;
29+ }
30+ return left ;
31+ }
32+
33+ function solution ( input ) {
34+ const dots = input [ 1 ]
35+ . split ( " " )
36+ . map ( Number )
37+ . sort ( ( a , b ) => a - b ) ;
38+ const lines = input . slice ( 2 ) . map ( ( line ) => line . split ( " " ) . map ( Number ) ) ;
39+ const result = [ ] ;
40+
41+ for ( let [ a , b ] of lines ) {
42+ const count = upperBound ( dots , b ) - lowerBound ( dots , a ) ;
43+ result . push ( count ) ;
44+ }
45+
46+ return result . join ( "\n" ) ;
47+ }
48+
49+ console . log ( solution ( input ) ) ;
You can’t perform that action at this time.
0 commit comments