提出 #25065595


ソースコード 拡げる

#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

#define ld long double
#define ull unsigned long long
#define ll long long
#define pb push_back
#define ppb pop_back
#define eb emplace_back
#define pii pair<int, int>
#define pll pair<ll, ll>
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define fast_io cout.tie(0), cin.tie(0), ios_base::sync_with_stdio(0)

//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("O3")

using namespace std;
//using namespace __gnu_pbds;
//typedef tree<ll, null_type, less_equal<>, rb_tree_tag,
//    tree_order_statistics_node_update> ordered_set;

ld eps = (ld) 1 / 1e6;
ll inf_ll = 1e18 + 100, mod1 = 1e9 + 7, mod2 = 998244353;
ll mersen_mod = 2305843009213693951;

ll sqr(ll a) { return a * a; }
ll qb(ll a) { return a * a * a; }
ll gcd(ll a, ll b) { return !a ? b : gcd(b % a, a); }
ll add(ll a, ll b, ll mod) {
  a += b;
  if (a >= mod) a -= mod;
  return a;
}
ll sub(ll a, ll b, ll mod) {
  a -= b;
  if (a < 0) a += mod;
  return a;
}
ll binpow(ll a, ll b, ll mod) {
  return b ? (b % 2 ? (a * (sqr(binpow(a, b / 2, mod)) % mod)) % mod :
              sqr(binpow(a, b / 2, mod)) % mod) : 1;
}
ll binmult(ll a, ll b, ll mod) {
  return b ? (b % 2 ? (2 * binmult(a, b / 2, mod) + a) % mod :
              (2 * binmult(a, b / 2, mod)) % mod) : 0;
}

/// Code here
ll dp[200001];

int main() {
  fast_io;
  string a;
  ll i, j, n, ans;
  cin >> a;
  n = a.size();
  a = '0' + a;
  dp[1] = 1, ans = 1;
  for (i = 2; i <= n; i++) {
    if (a[i] == a[i - 1]) dp[i] = dp[i - 2];
    else {
      for (j = i - 2; j > 0 && a[i] != a[j]; j--) dp[i] = add(dp[i], dp[j], mod1);
      dp[i] = add(dp[i], dp[j], mod1);
      if (!j) dp[i] = add(dp[i], 1, mod1);
      else dp[i] = add(dp[i], dp[j - 1], mod1);
    }
    ans = add(ans, dp[i], mod1);
  }
  cout << ans;
  //cerr << '\n' << "Time execute: " << clock() / (double)CLOCKS_PER_SEC << " sec" << '\n';
  return 0;
}

提出情報

提出日時
問題 F - Substrings
ユーザ thirty_something
言語 C++ (GCC 9.2.1)
得点 500
コード長 2141 Byte
結果 AC
実行時間 24 ms
メモリ 5280 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 4
AC × 31
セット名 テストケース
Sample sample_00.txt, sample_01.txt, sample_02.txt, sample_03.txt
All case_00.txt, case_01.txt, case_02.txt, case_03.txt, case_04.txt, case_05.txt, case_06.txt, case_07.txt, case_08.txt, case_09.txt, case_10.txt, case_11.txt, case_12.txt, case_13.txt, case_14.txt, case_15.txt, case_16.txt, case_17.txt, case_18.txt, case_19.txt, case_20.txt, case_21.txt, case_22.txt, case_23.txt, case_24.txt, case_25.txt, case_26.txt, sample_00.txt, sample_01.txt, sample_02.txt, sample_03.txt
ケース名 結果 実行時間 メモリ
case_00.txt AC 16 ms 5268 KiB
case_01.txt AC 15 ms 5168 KiB
case_02.txt AC 15 ms 5228 KiB
case_03.txt AC 16 ms 5264 KiB
case_04.txt AC 16 ms 5248 KiB
case_05.txt AC 18 ms 5264 KiB
case_06.txt AC 24 ms 5228 KiB
case_07.txt AC 18 ms 5280 KiB
case_08.txt AC 21 ms 5268 KiB
case_09.txt AC 15 ms 5156 KiB
case_10.txt AC 15 ms 5248 KiB
case_11.txt AC 19 ms 5228 KiB
case_12.txt AC 14 ms 5224 KiB
case_13.txt AC 20 ms 5160 KiB
case_14.txt AC 19 ms 5280 KiB
case_15.txt AC 13 ms 5216 KiB
case_16.txt AC 17 ms 5156 KiB
case_17.txt AC 13 ms 5176 KiB
case_18.txt AC 15 ms 5280 KiB
case_19.txt AC 18 ms 5276 KiB
case_20.txt AC 13 ms 4680 KiB
case_21.txt AC 2 ms 3556 KiB
case_22.txt AC 13 ms 4984 KiB
case_23.txt AC 5 ms 3832 KiB
case_24.txt AC 4 ms 3784 KiB
case_25.txt AC 5 ms 5216 KiB
case_26.txt AC 2 ms 3624 KiB
sample_00.txt AC 2 ms 3624 KiB
sample_01.txt AC 2 ms 3536 KiB
sample_02.txt AC 2 ms 3624 KiB
sample_03.txt AC 2 ms 3492 KiB