#NOIp403. Serenity(Serenity)

Serenity(Serenity)

题目描述

给定一个字符串 SS = s1s2...sns_1s_2...s_n,定义其翻转区间 [l,r][l,r](1≤l≤r≤∣S∣1 ≤ l ≤ r ≤ |S|)后得到的字符串为 S′S^′ = $s_1s_2...s_{l−1}s_rs_{r−1} ...s_{l+1}s_ls_{r+1} ...s_n$。

求 SS 翻转任意一个区间可以得到的不同的字符串数量。

输入格式

从文件 serenity.inserenity.in 中读入数据。

一行一个字符串 SS。

输出格式

输出到文件 serenity.outserenity.out 中。

一行一个非负整数表示答案。

样例 1 输入

abcd

样例 1 输出

7

样例 1 解释

共有 1010 种不同的翻转方法:

  1. 翻转区间 [1,1][1,1],得到 abcdabcd;

  2. 翻转区间 [2,2][2,2],得到 abcdabcd;

  3. 翻转区间 [3,3][3,3],得到 abcdabcd;

  4. 翻转区间 [4,4][4,4],得到 abcdabcd;

  5. 翻转区间 [1,2][1,2],得到 bacdbacd;

  6. 翻转区间 [2,3][2,3],得到 acbdacbd;

  7. 翻转区间 [3,4][3,4],得到 abdcabdc;

  8. 翻转区间 [1,3][1,3],得到 cbadcbad;

  9. 翻转区间 [2,4][2,4],得到 adcbadcb;

  10. 翻转区间 [1,4][1,4],得到 dcbadcba。

可以得到的字符串为:abcd,bacd,acbd,abdc,cbad,adcb,dcbaabcd,bacd,acbd,abdc,cbad,adcb,dcba,共 77 种。

样例 2

见右侧文件下的 serenity2.inserenity2.in 与 serenity2.ansserenity2.ans。

数据范围与提示

对于所有测试数据,保证 1≤∣S∣≤3×1061≤|S|≤3×10^6,保证 SS 中仅包含英文小写字母。

每个测试点的具体限制见下表:

测试点编号 ∣S∣≤|S|≤ 特殊性质
11 3030 是
2∼42∼4 否
55 300300 是
6∼86∼8 否
99 30003000 是
10∼1210∼12 否
1313 3×1053×10^5 是
14∼1614∼16 否
1717 3×1063×10^6 是
18∼2018∼20 否