【kick start-1】Round C 2020 - Kick Start 2020

第一次成功參賽Kick Start,排名感人,後面會好的!!!

Problem

Avery has an array of N positive integers. The i-th integer of the array is Ai.

A contiguous subarray is an m-countdown if it is of length m and contains the integers m, m-1, m-2, …, 2, 1 in that order. For example, [3, 2, 1] is a 3-countdown.

Can you help Avery count the number of K-countdowns in her array?

Input
The first line of the input gives the number of test cases, T. T test cases follow. Each test case begins with a line containing the integers N and K. The second line contains N integers. The i-th integer is Ai.

Output
For each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is the number of K-countdowns in her array.

Limits
Time limit: 20 seconds per test set.
Memory limit: 1GB.
1 ≤ T ≤ 100.
2 ≤ K ≤ N.
1 ≤ Ai ≤ 2 × 105, for all i.

Test set 1
2 ≤ N ≤ 1000.

Test set 2
2 ≤ N ≤ 2 × 105 for at most 10 test cases.
For the remaining cases, 2 ≤ N ≤ 1000.

Sample

Input

Output

3
12 3
1 2 3 7 9 3 2 1 8 3 2 1
4 2
101 100 99 98
9 6
100 7 6 5 4 3 2 1 100

Case #1: 2
Case #2: 0
Case #3: 1

In sample case #1, there are two 3-countdowns as highlighted below.
1 2 3 7 9 3 2 1 8 3 2 1
1 2 3 7 9 3 2 1 8 3 2 1

In sample case #2, there are no 2-countdowns.

In sample case #3, there is one 6-countdown as highlighted below.
100 7 6 5 4 3 2 1 100

discussion

  1. 判斷一個序列裏含有幾個子序列
  2. 設置count變量表明已經有幾位匹配了,temp表示模板子串中要匹配的值
  3. 我的算法複雜度是O(n),待匹配字符串不走回頭路,就是滑動窗口的解法,在這裏,我要再次安利Mr labuladong的項目,github鏈接,大家放肆戳!
  4. 這道題非常easy!!
  5. 一個可以debug的輸入是:
    12 3
    1 2 3 7 3 3 2 1 8 3 2 1

code

import java.util.*;
import java.io.*;
public class Solution {
    public static void main(String[] args) {
        Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        int t = in.nextInt(); // Scanner has functions to read ints, longs, strings, chars, etc.
        for (int i = 1; i <= t; ++i) {
            int n = in.nextInt();
            int m = in.nextInt();
            if(m > n){
                System.out.println("Case #" + i + ": " + 0);
            } else {
                int temp = m, count = 0, res = 0;
                while(n-- > 0){
                    int val = in.nextInt();
                    if(val == m){
                        count = 1;
                        temp = m - 1;
                    } else if(val == temp){
                        ++count;
                        temp--;
                        if(count == m){
                            res++;
                            temp = m;
                            count = 0;
                        }
                    } else {
                        temp = m;
                        count = 0;
                    }
                }
                System.out.println("Case #" + i + ": " + res);
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章