高々二つの文字を削除します。

唯一の小文字の英文字を含む文字列を考えると、あなたはそれに最大2つの文字を削除した後、どのように多くの異なる文字列を得ることができますか?

入力仕様:

各入力ファイルの長さは文字列与えるつのテストケースが含ま  [します。

出力仕様:

ラインでは、ほとんどの2つの文字で削除した後得ることができます異なる文字列の数を出力します。

サンプル入力:

ababcc
 

サンプル出力:

15
 

ヒント:

0の文字を削除して取得します  ababcc

1つの文字を削除すると取得  babcc、  aabcc、  abbcc、  abacc と  ababc

2文字を削除すると、取得  abcc、  bbcc、  bacc、  babc、  aacc、  aabc、  abbc、  abac と  abab

1の#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  INT メイン()
 4  {
 5つの      IOS :: sync_with_stdio()。
6   //      freopenは( "data.txtを"、 "R"、STDIN)。
7        文字列SS。
8        cinを>> SS。
9        長い 長い和、K = ss.size()。
10        長い 長い T = 1つの + K + K *(K- 1)/ 2、CON = 1、SCON = 0、SPART = 0 11       以下のための長い  iは= 1、I ++; I <K 12        {
 13            であれば(SS [I] == SS [I- 1 ])
 14          {
 15                CON ++ 16                t-- ;
17          }
 18          他の
19          {      
 20                であれば(CON> 1 21                {
 22                  であれば(SPART)
 23                  、T = T-SCON * CON + SPART。
24                  
25                  、T = T-CON *(コン1)/ 2 + 1 26                  SCON = SCON + CON。
27                  SPART ++ ;
28                 }
 29                CON = 1 30                もし(I> 1つの && SS [I] == SS [I- 2 ])
 31                t-- 32          }
 33        }
 34        であれば(CON> 1 35        {
 36          であれば(SPART)
 37          、T = T-SCON * CON + SPART。
38         T = T-CON *(コン1)/ 2 + 1 39             SCON = SCON + CON。
40             SPART ++ ;
41        }
 42        であれば(SPART)
 43        T = T-(K-SCON)*(scon- SPART)。
44        
45        COUT << T。
46      リターン 0 ;
47 }

 

おすすめ

転載: www.cnblogs.com/SkystarX/p/12285775.html