当前位置: 代码迷 >> 综合 >> zcmu--2204: Keyboard(模拟)+ ZCMU 1128(简单模拟)
  详细解决方案

zcmu--2204: Keyboard(模拟)+ ZCMU 1128(简单模拟)

热度:36   发布时间:2023-12-26 09:55:30.0

目录

ZCMU 2204: Keyboard

ZCMU 1128: 第四章:谁先爱了,谁就输了(简单模拟)


2204: Keyboard

Time Limit: 2 Sec  Memory Limit: 256 MB
Submit: 44  Solved: 20
[Submit][Status][Web Board]

Description

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Vasya learns to type. He has an unusual keyboard at his disposal: it is rectangular and it has n rows of keys containing m keys in each row. Besides, the keys are of two types. Some of the keys have lowercase Latin letters on them and some of the keys work like the "Shift" key on standard keyboards, that is, they make lowercase letters uppercase.

Vasya can press one or two keys with one hand. However, he can only press two keys if the Euclidean distance between the centers of the keys does not exceed x. The keys are considered as squares with a side equal to 1. There are no empty spaces between neighbouring keys.

Vasya is a very lazy boy, that's why he tries to type with one hand as he eats chips with his other one. However, it is possible that some symbol can't be typed with one hand only, because the distance between it and the closest "Shift" key is strictly larger than x. In this case he will have to use his other hand. Having typed the symbol, Vasya returns other hand back to the chips.

You are given Vasya's keyboard and the text. Count the minimum number of times Vasya will have to use the other hand.

Input

The first line contains three integers n, m, x (1≤n,m≤30,1≤x≤50).

Next n lines contain descriptions of all the keyboard keys. Each line contains the descriptions of exactly m keys, without spaces. The letter keys are marked with the corresponding lowercase letters. The "Shift" keys are marked with the "S" symbol.

Then follow the length of the text q (1≤q≤5·105). The last line contains the text T, which consists of q symbols, which are uppercase and lowercase Latin letters.

Output

If Vasya can type the text, then print the minimum number of times he will have to use his other hand. Otherwise, print "-1" (without the quotes).

Examples

Input

2 2 1
ab
cd
1
A

Output

-1

Input

2 2 1
ab
cd
1
e

Output

-1

Input

2 2 1
ab
cS
5
abcBA

Output

1

Input

3 9 4
qwertyuio
asdfghjkl
SzxcvbnmS
35
TheQuIcKbRoWnFOXjummsovertHeLazYDOG

Output

2

Note

In the first sample the symbol "A" is impossible to print as there's no "Shift" key on the keyboard.

In the second sample the symbol "e" is impossible to print as there's no such key on the keyboard.

In the fourth sample the symbols "T", "G" are impossible to print with one hand. The other letters that are on the keyboard can be printed. Those symbols come up in the text twice, thus, the answer is 2.

【分析】模拟题啦~  细节

【代码】

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;const int maxn=5e5+5;
char s[maxn];
char jp[35][35];//键盘
bool to[100];//shift键能到哪些键 
bool exist[35];//是否存在bool findd(char a[],char ch)
{int len=strlen(a);for(int i=0;i<len;i++)if(a[i]==ch)return true;return false;
}
int main()
{int n,m,x;scanf("%d%d%d",&n,&m,&x);memset(exist,false,sizeof(exist));memset(to,false,sizeof(to));for(int i=0;i<n;i++)scanf("%s",jp[i]);int kk=0,flag=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(jp[i][j]=='S'){flag=1;for(int k=0;k<n;k++)for(int p=0;p<m;p++)if((k-i)*(k-i)+(p-j)*(p-j)<=x*x && jp[k][p] != 'S'){to[jp[k][p]-'a']=true;}}else			exist[jp[i][j]-'a']=true;	int q;scanf("%d",&q);getchar();int an=0,ans=0;scanf("%s",s);for(int i=0;i<q;i++){if(s[i]>='a'&&s[i]<='z'){if (!exist[s[i] - 97]){puts("-1");return 0;	} }else if(s[i]>='A'&&s[i]<='Z'){if (flag == 0){puts("-1");return 0;}if(exist[tolower(s[i])-'a']==true){if(to[tolower(s[i])-'a']==false) ans++;}else { printf("-1\n");return 0;}}}printf("%d\n",ans);
}

1128: 第四章:谁先爱了,谁就输了(简单模拟)

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 419  Solved: 89
[Submit][Status][Web Board]

Description

        有时候就是这么奇怪,在那天晚上跟陈孝正杠上之前,郑微从来没有听说过,也没有发现过这个人的存在。当然,也许他曾无数次地从她身边擦肩而过,或许也曾有人有意无意地在她面前说起过这个名字,只不过当时的这个人和这个名字对于郑微来说毫无意义,所以她浑然未觉,然而当她开始留意这个家伙,才发现他无所不在。

        本来建筑系和土木系就是一个学院的,彼此关系还算密切,又在同一栋教学楼,简直是抬头不见低头见。而且郑微还惊讶地发现,这家伙居然还小有名气,院里不少人都听说过他,无非是去年高分录取的状元,成绩挺不错,曾在建筑模型设计比赛中获奖之类的。跟阮阮说的大同小异,工程图学的那个老学究也在课堂上提起过他,俨然一副得意门生的口吻,就连卧谈会上她也曾经从黎维娟(郑薇的室友)的嘴里听到过他的名字,一向心高气傲的黎维娟竟然也对他颇为向往。

到底郑薇跟陈孝正是如何杠上的呢?其实是一份C语言程序代码!请把这份C语言代码的注释去除掉。

Input

输入数据中含有一些符合C语言语法的代码行。

Output

输出不含有双斜杠注释的C语言代码,除了注释代码之外,原语句行格式不变,行尾也不应有空格。如果整一行只有注释,那么你应该忽略这一行。

Sample Input

//======================
// simplest program
//======================
#include<stdio.h>
#include<math.h>
//----------------------
int main(){printf("My World!\n");return 0;
}//---------------------

Sample Output

#include<stdio.h>
#include<math.h>
int main(){printf("My World!\n");return 0;
}

HINT

郑薇意外地爱上了陈孝正。

【分析】简单模拟。注意考虑双引号里的//;

【代码】

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;int main()
{string s;while(getline(cin,s)){int pos1=-1,pos2=-1,pos3=-1;int len=s.length();for(int i=0;i<len;i++){if(s[i]=='"'&&pos1==-1)pos1=i;else if(s[i]=='/'&&s[i+1]=='/')pos2=i;else if(s[i]=='"' && pos1!=-1)pos3=i;}if(pos2==0)continue;if((pos1!=-1 && pos3<pos2) || (pos1==-1 && pos2!=-1)){for(int i=0;i<pos2;i++)printf("%c",s[i]);puts("");}else cout<<s<<endl;}return 0;
}