Submission #627960
Source Code Expand
using System; using System.Collections.Generic; using System.Linq; class Program { static string ReadLine() { return Console.ReadLine(); } static int ReadInt() { return int.Parse(ReadLine()); } static int[] ReadInts() { return ReadLine().Split().Select(int.Parse).ToArray(); } static string[] ReadStrings() { return ReadLine().Split(); } const int MOD = (int)1e9 + 7; static int CalcNaive(int n, int k) { var dp = new int[n+1, k]; // [駅, 連続して停止した駅数] dp[1, 1] = 1; for (int i = 2; i <= n; i++) { // i 番目の駅 // i 番目の駅で停車しない for (int j = 0; j < k; j++) { dp[i, 0] = (dp[i, 0] + dp[i-1, j]) % MOD; } // i 番目の駅で停車する for (int j = 0; j < k-1; j++) { dp[i, j+1] = (dp[i, j+1] + dp[i-1, j]) % MOD; } } int ans = 0; for (int i = 1; i < k; i++) { ans = (ans + dp[n, i]) % MOD; } return ans; } static int Calc(int n, int k) { var dp = new int[n+1]; // i 番目の駅で停車しない var q = new Queue<int>(); // 連続して停止した駅の数 (q.Count < K) q.Enqueue(1); int qsum = q.Sum(); for (int i = 2; i < n; i++) { // i 番目の駅で停車しない dp[i] = (dp[i] + dp[i-1]) % MOD; // i-1 から停車せずに i に来る dp[i] = (dp[i] + qsum) % MOD; // 連続して 1~K-1 回停車して i に来る // i 番目の駅で停車する q.Enqueue(dp[i-1]); // i 番目の駅(0 回連続停車) qsum = (qsum + dp[i-1]) % MOD; if (q.Count == k) { qsum = (qsum - q.Dequeue() + MOD) % MOD; } } int ans = dp[n-1]; // n-1 番目の駅まで 0 回連続停車 ans = (ans + qsum) % MOD; // n-1 番目の駅まで 1~K-1 回連続停車 if (q.Count == k-1) { // k-1 回連続停車を取り除く ans = (ans - q.Peek() + MOD) % MOD; } return ans; } static void Main() { var nk = ReadInts(); int n = nk[0], k = nk[1]; Console.WriteLine(Calc(n, k)); } }
Submission Info
Submission Time | |
---|---|
Task | F - 準急 |
User | noriok |
Language | C# (Mono 2.10.8.1) |
Score | 4 |
Code Size | 2336 Byte |
Status | AC |
Exec Time | 262 ms |
Memory | 21208 KB |
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 4 / 4 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 00, 01, 02, 03, 04, 90, 91 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00 | AC | 262 ms | 14004 KB |
01 | AC | 203 ms | 21208 KB |
02 | AC | 171 ms | 12524 KB |
03 | AC | 163 ms | 11408 KB |
04 | AC | 198 ms | 13728 KB |
90 | AC | 148 ms | 10140 KB |
91 | AC | 143 ms | 10076 KB |