結果
問題 | No.1740 Alone 'a' |
ユーザー |
![]() |
提出日時 | 2021-11-12 21:54:19 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 107 ms / 2,000 ms |
コード長 | 2,372 bytes |
コンパイル時間 | 2,885 ms |
コンパイル使用メモリ | 163,532 KB |
実行使用メモリ | 33,272 KB |
最終ジャッジ日時 | 2024-11-25 18:13:45 |
合計ジャッジ時間 | 5,676 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 38 |
ソースコード
#include "atcoder/all"#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <deque>#include <list>#include <queue>#include <stack>#include <vector>#include <utility>#include <algorithm>#include <map>#include <set>#include <complex>#include <cmath>#include <limits>#include <climits>#include <ctime>#include <cassert>#include <numeric>#include <functional>#include <bitset>#include <cstddef>#include <type_traits>#include <vector>using namespace std;const long long int INF = numeric_limits<long long int>::max() / 4;const int inf = numeric_limits<int>::max() / 4;const long long int MOD1000000007 = 1000000007;const long long int MOD998244353 = 998244353;const double MATH_PI = 3.1415926535897932;template<typename T1, typename T2>inline void chmin(T1 &a, const T2 &b) { if (a > b) a = b; }template<typename T1, typename T2>inline void chmax(T1 &a, const T2 &b) { if (a < b) a = b; }#define lint long long int#define ALL(a) a.begin(),a.end()#define RALL(a) a.rbegin(),a.rend()#define rep(i, n) for(int i=0;i<(int)(n);i++)#define VI vector<int>#define VLL vector<long long>#define VC vector<char>#define VB vector<bool>#define PI pair<int, int>#define PLL pair<long long, long long>#define VPI vector<pair<int, int>>#define VPLL vector<pair<long long, long long>>#define VVI vector<vector<int>>#define VVPI vecor<vector<pair<int, int>>>#define VVPILL vector<vector<pair<int, long long>>>#define SUM(v) accumulate(ALL(v), 0LL)#define MIN(v) *min_element(ALL(v))#define MAX(v) *max_element(ALL(v))using mint = atcoder::modint998244353;int main() {int n; cin >> n;string s; cin >> s;vector<vector<vector<mint>>> dp(n + 1, vector<vector<mint>>(2, vector<mint>(2, 0)));dp[0][0][0] = 1;for (int i = 0; i < n; i++) {for (int f1 = 0; f1 < 2; f1++) {for (int f2 = 0; f2 < 2; f2++) {// 何を使うかfor (char c = 'a'; c <= 'z'; c++) {if (!f1 and c > s[i]) continue;if (f2 and c == 'a') continue;int nf1 = (f1 or c < s[i]) ? 1 : 0;int nf2 = (f2 or c == 'a') ? 1 : 0;dp[i + 1][nf1][nf2] += dp[i][f1][f2];}}}}cout << dp[n][1][1].val() << endl;return 0;}