美好的每一天(洛谷2017春节联欢赛 Hello Dingyou)(提高组)

来源:互联网 发布:分体式集成灶 品牌知乎 编辑:程序博客网 时间:2024/05/21 09:27

题目:

题目背景

时间限制3s,空间限制162MB

素晴らしき日々

我们的情人,不过是随便借个名字,用幻想吹出来的肥皂泡,把信拿去吧,你可以使假戏成真。我本来是无病呻吟,漫无目的的吐露爱情—现在这些漂泊不定的鸟儿有地方栖息了,你可以从信里看出来。拿去吧—由于不是出自真心,话就说得格外动听,拿去吧,就这么办吧…

由于世界会在7月20日完结,作为救世主,间宫卓司要在19日让所有人回归天空

现在已经是19日傍晚,大家集合在C栋的天台上,一共n个人

在他们面前,便是终之空,那终结的天空

题目描述

回归天空是一件庄重的事情,所以卓司决定让大家分批次进行,给每个人给了一个小写字母’a’->’z’作为编号

一个区间的人如果满足他们的编号重排之后可以成为一个回文串,则他们可以一起回归天空,即这个区间可以回归天空

由于卓司是一个喜欢妄想的人,他妄想了m个区间,每次他想知道每个区间中有多少个子区间可以回归天空

因为世界末日要来了,所以卓司的信徒很多

输入输出格式

输入格式:
第一行两个数n,m

之后一行一个长为n的字符串,代表每个人的编号

之后m行每行两个数l,r代表每次卓司妄想的区间

输出格式:
m行,每行一个数表示答案

作者思路:组成回文串的条件是:每个字符数量不能是奇数或只有一个奇数。我的代码是暴力,只能拿十分。要优化要求前缀和。

超时代码:

var st:array[0..60001] of char;    n,m,i,j,k,ans,x,y:longint;function check(x,y:longint):boolean;var c:char;    ch:array['a'..'z'] of longint;    i,t:longint;begin  t:=0;  fillchar(ch,sizeof(ch),0);  for i:=x to y do    inc(ch[st[i]]);  for c:='a' to 'z' do    if ch[c] mod 2=1 then inc(t);  if t<2 then exit(true) else exit(false);end;begin  readln(n,m);  for i:=1 to n do    read(st[i]);  readln;  for i:=1 to m do  begin    ans:=0;    read(x,y);    for j:=x to y do      for k:=j to y do        if check(j,k) then inc(ans);    writeln(ans);  end;end.
0 0