20240819 Finished
This commit is contained in:
parent
d7a1bd1e1b
commit
51c4dc623d
|
@ -209,3 +209,5 @@ mod p221_maximal_square;
|
||||||
mod p3117_minimum_sum_of_values_by_dividing_array;
|
mod p3117_minimum_sum_of_values_by_dividing_array;
|
||||||
mod p3137_minimum_number_of_operations_to_make_word_k_periodic;
|
mod p3137_minimum_number_of_operations_to_make_word_k_periodic;
|
||||||
mod p551_student_attendance_record_i;
|
mod p551_student_attendance_record_i;
|
||||||
|
|
||||||
|
mod p552_student_attendance_record_ii;
|
61
src/problem/p552_student_attendance_record_ii.rs
Normal file
61
src/problem/p552_student_attendance_record_ii.rs
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/**
|
||||||
|
* [552] Student Attendance Record II
|
||||||
|
*/
|
||||||
|
pub struct Solution {}
|
||||||
|
|
||||||
|
|
||||||
|
// submission codes start here
|
||||||
|
|
||||||
|
impl Solution {
|
||||||
|
pub fn check_record(n: i32) -> i32 {
|
||||||
|
let mod_number = 1_000_000_007;
|
||||||
|
let n =n as usize;
|
||||||
|
|
||||||
|
let mut dp = vec![vec![vec![0;3];2];n + 1];
|
||||||
|
dp[0][0][0] = 1;
|
||||||
|
|
||||||
|
for i in 1..=n {
|
||||||
|
// record ends with 'P'
|
||||||
|
for j in 0..2 {
|
||||||
|
for k in 0..3 {
|
||||||
|
dp[i][j][0] = (dp[i][j][0] + dp[i - 1][j][k]) % mod_number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// record ends with 'A'
|
||||||
|
for k in 0..3 {
|
||||||
|
dp[i][1][0] = (dp[i][1][0] + dp[i - 1][0][k]) % mod_number;
|
||||||
|
}
|
||||||
|
|
||||||
|
// record ends with 'L'
|
||||||
|
for j in 0..2 {
|
||||||
|
for k in 1..3 {
|
||||||
|
dp[i][j][k] = (dp[i][j][k] + dp[i - 1][j][k - 1]) % mod_number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut result = 0;
|
||||||
|
for i in 0..2 {
|
||||||
|
for j in 0..3 {
|
||||||
|
result = (result + dp[n][i][j]) % mod_number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// submission codes end
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_552() {
|
||||||
|
assert_eq!(8, Solution::check_record(2));
|
||||||
|
assert_eq!(3, Solution::check_record(1));
|
||||||
|
assert_eq!(183_236_316, Solution::check_record(10101));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user