uva12583 Memory Overflow

uva12583

uDebug12583

题意说The Great Sultan Mahbub这家伙有健忘症,今天看到的人,k天内碰到还能认识,k天以后就忘记了。给定n个人和k天,以及n个人的名字字符串(每个人的人名是以单个字母的大写形式表示),求每组测试数据,这家伙能认出多少人。

简单题,设置一个名字的整形数组用于记录:

  1. 每读入一个名字,数组相应位置+k;
  2. 每天每个名字的数值-1。

要判断是否认识这个人,只需要在每次读入名字时,判断数组对应位置是否大于0,如果是,表示还认识,否则就是遗忘了。

python版本代码:

name = [0 for i in range(26)]
testcase = int(input())

for i in range(testcase+1):
	if i == 0:
		continue
	name = [0 for i in range(26)]
	n,k,namelist = input().split()
	n = int(n)
	k = int(k)
	cnt = 0
	for j in range(n):
		nid = ord(namelist[j]) - ord('A')
		if name[nid] > 0:
			cnt += 1
		for l in range(26):
			name[l] -= 1
		name[nid] = k
	print("Case %d: %d" %(i,cnt))

C++版本代码

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;

//#define ZANGFONG
int name[26];
char s[510];

int main()
{
    #ifdef ZANGFONG
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif // ZANGFONG
    int testcase, n,k,i,j,l;
    int cnt,id;

    scanf("%d\n",&testcase);
    for(i = 1; i <= testcase; i++)
    {
        memset(name,0,sizeof(name));
        memset(s,0,sizeof(s));
        scanf("%d%d%s\n",&n, &k, s);
        cnt = 0;
        for(j = 0; j < n; j++)
        {
            id = s[j] - 'A';
            if(name[id] > 0) cnt++;
            for(l = 0; l < 26; l++) name[l]--;
            name[id] = k;
        }
        printf("Case %d: %d\n",i,cnt);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zangfong/article/details/82805324
今日推荐