結果
問題 | No.852 連続部分文字列 |
ユーザー |
![]() |
提出日時 | 2019-07-26 21:45:16 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,943 bytes |
コンパイル時間 | 1,034 ms |
コンパイル使用メモリ | 112,592 KB |
実行使用メモリ | 16,520 KB |
最終ジャッジ日時 | 2024-07-02 06:54:59 |
合計ジャッジ時間 | 8,575 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 TLE * 1 -- * 10 |
ソースコード
#include<iostream>#include<string>#include<cstdio>#include<vector>#include<cmath>#include<algorithm>#include<functional>#include<iomanip>#include<queue>#include<ciso646>#include<random>#include<map>#include<set>#include<bitset>#include<stack>#include<unordered_map>#include<utility>#include<cassert>using namespace std;//#define int long longtypedef long long ll;typedef unsigned long long ul;typedef unsigned int ui;const ll mod = 998244353;const ll INF = mod * mod;typedef pair<int, int> P;#define stop char nyaa;cin>>nyaa;#define rep(i,n) for(int i=0;i<n;i++)#define per(i,n) for(int i=n-1;i>=0;i--)#define Rep(i,sta,n) for(int i=sta;i<n;i++)#define rep1(i,n) for(int i=1;i<=n;i++)#define per1(i,n) for(int i=n;i>=1;i--)#define Rep1(i,sta,n) for(int i=sta;i<=n;i++)typedef pair<ll, ll> LP;typedef vector<ll> vec;typedef vector<string> svec;typedef long double ld;typedef pair<ld, ld> LDP;const ld eps = 1e-8;vector<int> loc[26];void solve() {string s; cin >> s;int n = s.length();rep(i, n) {loc[s[i]-'a'].push_back(i);}rep(i, 26)loc[i].push_back(n);ll ans = 0;rep(i, n) {int cur = i;bool used[26] = {};used[s[i] - 'a'] = true;int tmp = 1;while (cur < n) {int mi = n; int chk=-1;rep(j, 26) {if (used[j])continue;int id = upper_bound(loc[j].begin(), loc[j].end(), cur) - loc[j].begin();if (loc[j][id] < mi) {mi = loc[j][id];chk = j;}}if (chk < 0) {ans += (ll)(n-cur) * tmp;break;}used[chk] = true;ll dif = mi - cur;ans += dif * tmp;// cout << cur<<" "<<tmp << " " << dif << endl;cur = mi;tmp++;}//cout << ans << endl;}//cout << ans << endl;ll ss = (ll)n*(n + 1) / 2;cout << ans / (ld)ss << endl;}signed main() {ios::sync_with_stdio(false);cin.tie(0);cout << fixed << setprecision(10);//init();solve();//cout << "finish" << endl;//stopreturn 0;}