Memory Overflow(队列+模拟)

Memory Overflow(队列+模拟)

题目描述

The Great Sultan Mahbub is having some serious issues with his memory. His busy days filled with great works and surrounded by even greater people have brought him to a situation where he has become quite forgetful. For example, he often forgets trivial things like the size of his suit, his weight,small grammatical issues related to gender & number, the address of his in-laws house, how to ride a cycle, deadlines, the day of the week, the name of the guy who forgot his wedding day and even the date of his own wedding (thus spending the day writing alternate solutions to ICPC problems). But when his father-in-law captured him to his in-laws house and he failed to recognize his mother-in-law it became a fiasco. And after some rather presumable events following that debacle, the detail of which does not seem really safe to mention, he decided that the matter has become pressing enough for his attention. His physician is startled by this weird problem and decides to collect statistical data to begin with.
During the examination period consisting n consecutive days, the Sultan meets a single person everyday. He only recognizes the person if he has met him in the last k days (excluding today of course). You need to count the number of days (among these n days) he manages to recognize the people he meets. You can assume that before these n consecutive days he did not meet any person.

输入

The input begins with a number t (1 ≤ t ≤ 100), the number of test cases. Each of the following lines contains a case. A case begins with n (1 ≤ n ≤ 500) & k (1 ≤ k ≤ 500). A list of n names follows. All
names consist of a single uppercase letter and names are unique. They are given in the order of which Sultan meets them during the investigation. There won’t be any invalid character or space between
any two names.

输出

For each test case produce a line of the form ‘Case X: Y ’. X is the serial number of the test case while Y is the number of people Sultan recognizes.
Illustration of Third sample:
Day 1: Sultan remembers nobody, meets ’M’. Does not recognize.
Day 2: Remembers only ’M’ but meets ’A’. Does not recognize again.
Day 3: Now remembers ’M’ & ’A’. Meets ’H’. Recognition count remains 0.
Day 4: Forgets ’M’, remembers ’A’ & ’H’. Meets ’B’. Still nothing happens.
Day 5: Forgets ’A’, remembers ’H’ & ’B’. Meets ’U’. No luck yet.
Day 6: Forgets ’H’, remembers ’B’ & ’U’. Meets ’B’ again and recognizes this time making the recognition count 1.

样例输入 

3
6 2 SULTAN
6 1 MAHBUB
6 2 MAHBUB

样例输出 

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

思路:这道题的意思就是一个人记性不好,记不住东西,第一个数字代表有几个测试用例,第二行第一个数字代表这个人将要遇见的人数,第二个是能最多记住的人数,第三个字符串是他将要遇见的人。一看到就想到了队列,每次都往这个队列里面添加元素,如果队列的长度超过了他能记住的人数,那么就出队,最后判断每次新遇见的人在不在这个队列中,在的话就+1,不在就继续,附上AC代码(这里是使用java的ArrayList模拟队列)

import java.util.ArrayList;
import java.util.Scanner;

public class Main
{
    public static void main(String[] argc)
    {
        Scanner in = new Scanner(System.in);
        int n = 0;
        int case_num = 0;
        n = in.nextInt();
        while(n-- > 0)
        {
            int num = in.nextInt();
            int len = in.nextInt();
            int cnt = 0;
            String s = in.next();
            ArrayList<Character> memory = new ArrayList<>();

            for(int i = 0; i < s.length(); ++i)
            {
                if(memory.contains(s.charAt(i)))
                {
                    cnt++;
                }
                memory.add(s.charAt(i));
                if(memory.size() > len)
                {
                    memory.remove(0);
                }
            }

            System.out.println("Case " + ++case_num + ": " + cnt);
        }

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值