Writing
[题目描述]
破译玛雅文字的难度远比早年的预期大得多。花了将近200年的时间,人们对玛雅文字仍然知之甚少。只是到了最近30年,才取得了实质性的进展。
玛雅文字是由被称为象形符号(glyph)、表示读音的小图形组成的。玛雅词汇通常被书写成放置在不同位置上的象形符号。
破译玛雅文字的难点之一是由阅读顺序引起的。当把几个象形符号放置在一起以便构成一个词时,玛雅作家有时更多的是根据他们自己的美学感觉来决定每个象形符号的位置,而不是依据任何特殊的规则。这就使得尽管很多象形符号的读音是已知的,很多时候考古学家依然不知道一个书面词汇的读音。
考古学家正在寻找一个特殊的词W。他们知道组成这个词的象形符号,但是不知道这个词的所有可能的写法。他们知道你来参加IOI2006,因此寻求你的帮助。他们所提供的是g个组成W的象形符号,以及他们正在研究的石刻上所有象形符号按出现顺序排列的序列S。请帮助他们计算出W的所有可能出现的次数。
写一个程序,给定W中的象形符号,以及石刻上的象形符号序列S,计算出S中所有可能出现的W的数量,即在S中连续出现的g个W中象形符号的任何排列方式的个数。
[输入文件]
LINE 1: 包含 2 个空格分隔的整数,分别表示 g(1 <= g <= 3000)和 |S|(g <= |S| <= 3000000)。
LINE 2: 包含g 个连续的字符,表示W中的象形符号。合法的字符为‘a’-‘z’ 和 ‘A’-‘Z’; 大小写区分。.
LINE 3: 包含 |S| 个连续的字符,表示在石刻上面的象形符号。合法的字符为‘a’-‘z’ 以及 ‘A’-‘Z’;大小写区分。
[输出文件]
LINE 1: W 在 S中可能出现的数量
[样例输入]
4 11
cAda
AbrAcadAbRa
[样例输出]
2
[数据约定]
所有测试数据中有50分的测试点,满足g ≤10。
=====================================
题意的理解啊!!!!!!!!!!!!!!!!
==================
var
a:array[1..3000]of char;
b:array[1..3000000]of char;
f:array[char]of longint;
f1:array[char]of longint;
g,s:longint;
procedure init;
begin
assign(input,'writing.in');
assign(output,'writing.out');
reset(input); rewrite(output);
end;
procedure terminate;
begin
close(input); close(output);
halt;
end;
function pd:boolean;
var
i:char;
begin
pd:=true;
for i:='a' to 'z' do
if f1[i]<>f[i] then exit(false);
for i:='A' to 'Z' do
if f1[i]<>f[i] then exit(false);
end;
procedure main;
var
i:longint;
ans:longint;
l,r:longint;
begin
readln(g,s);
for i:=1 to g do read(a[i]);
readln;
for i:=1 to s do read(b[i]);
ans:=0;
fillchar(f,sizeof(f),0);
fillchar(f1,sizeof(f1),0);
for i:=1 to g do inc(f1[a[i]]);
for i:=1 to g do inc(f[b[i]]);
if pd then inc(ans);
l:=1; r:=g;
while r<=s do
begin
dec(f[b[l]]);
inc(l); inc(r);
inc(f[b[r]]);
if pd then inc(ans);
end;
writeln(ans);
end;
begin
init;
main;
terminate;
end.