File tree Expand file tree Collapse file tree 5 files changed +144
-5
lines changed
atcoder/rust/typical90/src/bin Expand file tree Collapse file tree 5 files changed +144
-5
lines changed Original file line number Diff line number Diff line change @@ -12,8 +12,30 @@ use proconio::*;
1212use proconio:: marker:: * ;
1313use superslice:: * ;
1414
15+ const Mod : usize = 1000000007 ;
16+
1517fn main ( ) {
1618 input ! {
19+ n: usize ,
20+ l: usize ,
21+ }
22+
23+ let mut fact = vec ! [ 1 ; 1000000 ] ;
24+ let mut fact_inv = vec ! [ 1 ; 1000000 ] ;
25+ let mut inv = vec ! [ 1 ; 1000000 ] ;
26+ for i in 2 ..100000 {
27+ fact[ i] = fact[ i - 1 ] * i % Mod ;
28+ inv[ i] = Mod - inv[ Mod % i] * ( Mod / i) % Mod ;
29+ fact_inv[ i] = fact_inv[ i - 1 ] * inv[ i] % Mod ;
30+ }
1731
32+ let mut ans = 0 ;
33+ let max_l_num = n / l;
34+ for i in 0 ..=max_l_num {
35+ let n = ( n - i * l) + i;
36+ ans = ( ans + fact[ n] * ( fact_inv[ i] * fact_inv[ n - i] % Mod ) ) % Mod ;
1837 }
38+
39+ println ! ( "{}" , ans)
1940}
41+
Original file line number Diff line number Diff line change @@ -12,8 +12,28 @@ use proconio::*;
1212use proconio:: marker:: * ;
1313use superslice:: * ;
1414
15+ const Mod : usize = 1000000007 ;
16+
1517fn main ( ) {
1618 input ! {
19+ n: usize ,
20+ a: [ [ usize ; 6 ] ; n] ,
21+ }
22+
23+ //
1724
25+ let dice_sums: Vec < usize > = a. iter ( ) . map ( |dice| dice. iter ( ) . sum ( ) ) . collect ( ) ;
26+ if dice_sums. len ( ) == 1 {
27+ return println ! ( "{}" , dice_sums[ 0 ] ) ;
1828 }
29+
30+ let mut total = 0 ;
31+ for ( i, dice) in a. iter ( ) . enumerate ( ) {
32+ let s = dice_sums. iter ( ) . enumerate ( ) . filter ( |( k, dice) | * k != i) . map ( |( k, dice_sum) | dice_sum) . product :: < usize > ( ) % Mod ;
33+ for j in dice {
34+ total = ( total + j * s % Mod ) % Mod ;
35+ }
36+ }
37+
38+ println ! ( "{}" , total) ;
1939}
Original file line number Diff line number Diff line change 22
33use std:: cmp:: * ;
44use std:: collections:: * ;
5- use std:: io:: Write ;
65use std:: ops:: Bound :: * ;
76
87use itertools:: * ;
@@ -14,6 +13,29 @@ use superslice::*;
1413
1514fn main ( ) {
1615 input ! {
16+ n: usize , q: usize ,
17+ mut a: [ i128 ; n] ,
18+ lrv: [ ( usize , usize , i128 ) ; q] ,
19+ }
20+
21+ let mut total = 0 ;
22+ let mut diffs = vec ! [ ] ;
23+ for i in 1 ..a. len ( ) {
24+ total += ( a[ i-1 ] - a[ i] ) . abs ( ) ;
25+ diffs[ i] = ( a[ i-1 ] - a[ i] ) . abs ( ) ;
26+ }
1727
28+ for ( l, r, v) in lrv {
29+ let mut diff: i128 = 0 ;
30+ if l > 1 {
31+ diff += ( diffs[ l-2 ] + v) . abs ( ) - diffs[ l-2 ] ;
32+ diffs[ l-2 ] += v;
33+ }
34+ if r < n {
35+ diff += ( diffs[ r-1 ] - v) . abs ( ) - diffs[ r-1 ] ;
36+ diffs[ r-1 ] += v;
37+ }
38+ total += diff;
39+ seg_tree. apply_range ( l-1 , r-1 , v) ;
1840 }
1941}
Original file line number Diff line number Diff line change @@ -5,15 +5,71 @@ use std::collections::*;
55use std:: io:: Write ;
66use std:: ops:: Bound :: * ;
77
8- use itertools:: * ;
98use itertools:: __std_iter:: once;
9+ use itertools:: * ;
1010use itertools_num:: ItertoolsNum ;
11- use proconio:: * ;
1211use proconio:: marker:: * ;
12+ use proconio:: * ;
1313use superslice:: * ;
1414
1515fn main ( ) {
1616 input ! {
17+ n: usize ,
18+ }
19+ let prime_num = prime_factors ( n) . values ( ) . sum :: < usize > ( ) ;
20+ println ! ( "{}" , ( prime_num as f64 ) . log2( ) . ceil( ) )
21+ }
22+
23+ fn prime_factors ( mut n : usize ) -> HashMap < usize , usize > {
24+ let mut primes = sieve_of_eratosthenes ( f64:: sqrt ( n as f64 ) as usize ) ;
25+ let mut hm_primes = HashMap :: new ( ) ;
26+
27+ for prime in primes {
28+ while n % prime == 0 {
29+ n /= prime;
30+ if hm_primes. contains_key ( & prime) {
31+ let mut x = hm_primes. get_mut ( & prime) . unwrap ( ) ;
32+ * x += 1 ;
33+ } else {
34+ hm_primes. insert ( prime, 1 ) ;
35+ }
36+ }
37+ }
38+
39+ if n > 1 {
40+ if hm_primes. contains_key ( & n) {
41+ let mut x = hm_primes. get_mut ( & n) . unwrap ( ) ;
42+ * x += 1 ;
43+ } else {
44+ hm_primes. insert ( n, 1 ) ;
45+ }
46+ }
47+ hm_primes
48+ }
49+
50+ fn sieve_of_eratosthenes ( n : usize ) -> Vec < usize > {
51+ let mut spf = vec ! [ None ; n + 1 ] ;
52+ let mut is_prime = vec ! [ true ; n + 1 ] ;
53+ let mut primes = Vec :: new ( ) ;
54+
55+ is_prime[ 0 ] = false ;
56+ is_prime[ 1 ] = false ;
57+
58+ for i in 2 ..n + 1 {
59+ if is_prime[ i] {
60+ primes. push ( i) ;
61+ spf[ i] = Some ( i) ;
62+ }
63+
64+ for prime in & primes {
65+ if i * prime >= n + 1 || prime > & spf[ i] . unwrap ( ) {
66+ break ;
67+ }
68+
69+ is_prime[ i * prime] = false ;
1770
71+ spf[ i * prime] = Some ( * prime) ;
72+ }
1873 }
74+ primes
1975}
Original file line number Diff line number Diff line change @@ -5,15 +5,34 @@ use std::collections::*;
55use std:: io:: Write ;
66use std:: ops:: Bound :: * ;
77
8- use itertools:: * ;
98use itertools:: __std_iter:: once;
9+ use itertools:: * ;
1010use itertools_num:: ItertoolsNum ;
11- use proconio:: * ;
1211use proconio:: marker:: * ;
12+ use proconio:: * ;
1313use superslice:: * ;
1414
1515fn main ( ) {
1616 input ! {
17+ n: usize ,
18+ a: [ usize ; n] ,
19+ }
1720
21+ let total_size = a. iter ( ) . sum :: < usize > ( ) ;
22+ let mut cur_size = 0 ;
23+ let ( mut l, mut r) = ( 0 , 0 ) ;
24+ let a2 = a. iter ( ) . chain ( a. iter ( ) ) . map ( |& i| i) . collect :: < Vec < usize > > ( ) ;
25+ for ( i, size) in a2. iter ( ) . enumerate ( ) {
26+ cur_size += size;
27+ r = i;
28+ while cur_size > total_size / 10 {
29+ cur_size -= a2[ l] ;
30+ l += 1 ;
31+ }
32+ if l <= r && cur_size == total_size / 10 {
33+ return println ! ( "Yes" ) ;
34+ }
1835 }
36+
37+ println ! ( "No" )
1938}
You can’t perform that action at this time.
0 commit comments