結果
問題 | No.852 連続部分文字列 |
ユーザー | ahe100 |
提出日時 | 2019-07-26 21:39:43 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 82 ms / 3,153 ms |
コード長 | 838 bytes |
コンパイル時間 | 1,552 ms |
コンパイル使用メモリ | 166,488 KB |
実行使用メモリ | 5,452 KB |
最終ジャッジ日時 | 2024-07-02 06:45:58 |
合計ジャッジ時間 | 3,843 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 |
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i,n) for(ll i = 0;i<((ll)(n));i++) #define reg(i,a,b) for(ll i = ((ll)(a));i<=((ll)(b));i++) #define irep(i,n) for(ll i = ((ll)(n)-1);i>=0;i--) #define ireg(i,a,b) for(ll i = ((ll)(b));i>=((ll)(a));i--) /* */ string s; ll n; double ans=0; void init(){ cin>>s; n = s.size(); } int main(void){ init(); rep(i,26){ int before = 1; double sum = n*(n-1)/2 + n, l=0; rep(j,n){ // 0の長さを取得 if(s[j]=='a'+i){ if(before==0){ sum -= l*(l-1)/2 + l; l=1; }else{ l++; } before = 1; }else{ if(before==0){ l++; }else{ l=1; } before = 0; } } if(before==0)sum -= l*(l-1)/2 + l; // cerr<<i<<": "<<sum<<endl; ans += sum; } ans /= n*(n-1)/2 + n; cout<<ans<<endl; return 0; }