提出 #44061884


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
//#include <atcoder/modint>
//using namespace atcoder;
//using mint = modint998244353;
# define M_PI           3.14159265358979323846  /* pi */
#define watch(x) cout << (#x) << " is " << (x) << endl
 
//#pragma GCC target ("avx2")
#pragma GCC optimization ("Ofast")
 
const int MOD = (1e9+7);
template < typename T = int > ostream& operator << (ostream &out, const vector < T > &v){ 
    for (const T &x: v) out << x << ' '; 
    return out;
}
template<class T>
void printmat(const vector<vector<T>>& mat) {
    for (auto row : mat) {
        for (auto elem : row)
            cout << elem << " ";
        cout << "\n";
    }
}
void printdq(const deque<int>& v) {
    for (auto elem : v)
        cout << elem << " ";
    cout << endl;
}
template<class T>
void printv(const vector<T>& v) {
    for (auto elem : v)
        cout << elem << " ";
    cout << "\n";
}
template<class T>
void printdq(const deque<T>& v) {
    for (auto elem : v)
        cout << elem << " ";
    cout << endl;
}
template<class T1, class T2>
void printvp(const vector<pair<T1,T2>>& vp) {
    for (auto pr : vp) {
        cout << pr.first << " " << pr.second;
        cout << "\n";
    }
}
void printvs(const vector<set<int>>& vs) {
    for (auto row : vs) {
        for (auto elem : row)
            cout << elem << ", ";
        cout << endl;
    }
}
template<class T>
void printht(const unordered_map<T, T>& ht) {
    for (auto elem : ht)
        cout << elem.first << " : " << elem.second << endl;
}
template<class T1, class T2>
void printmp(const map<T1, T2>& ht) {
    for (auto elem : ht)
        cout << elem.first << " : " << elem.second << endl;
}
template<class T>
void printst(const set<T>& st) {
    for (auto elem : st)
        cout << elem << " ";
    cout << endl;
}
template<class T>
void printms(const multiset<T>& st) {
    for (auto elem : st)
        cout << elem << " ";
    cout << endl;
}
 
bool isPrime(long long n) {
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
    if (n % 2 == 0 || n % 3 == 0)
        return false;
    for (long long i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
    return true;
}
 
map<long long, long long> primeFactors(long long n) {
    map<long long, long long> ans;
    while (n % 2 == 0) {
        ans[2]++;
        n = n/2;
    }
    for (long long i = 3; i*i <= (n); i = i + 2) {
        while (n % i == 0) {
            ans[i]++;
            n = n/i;
        }
    }
    if (n > 2)
        ans[n]++;
    return ans;
}
 
/*
    vector<int> uf(n), sz(n,1);
    for (int i=0; i<n; i++) 
        uf[i] = i;
*/
int find_f(const vector<int>& uf, int i) {
    while (uf[i]!=i)
        i = uf[i];
    return i;
}
bool union_f(vector<int>& uf, vector<int>& sz, int a, int b) {
    a = find_f(uf, a);
    b = find_f(uf, b);
    //cout << "a, b = " << a << ", " << b << endl;
    if (a==b) return false;
    if (sz[a] < sz[b]) {
        //cout << "sz[a], sz[b] = " << sz[a] << ", " << sz[b] << endl;
        //cout << "a, b = " << a << ", " << b << endl;
        swap(a,b);
        //cout << "a, b = " << a << ", " << b << endl;
    }
    sz[a] += sz[b];
    uf[b] = a;
    return true;
}
 
long long modexp(long long b, long long e, long long M) {
    if (!e) return 1;
    b %= M;
    long long x = modexp(b * b % M, e / 2, M);
    if (e % 2) {
        return b * x % M;
    } else {
        return x;
    }
}


ll gcdExtended(ll a, ll b, ll* x, ll* y) {
    if (a == 0) {
        *x = 0, *y = 1;
        return b;
    }
    ll x1, y1;
    ll gcd = gcdExtended(b % a, a, &x1, &y1);
    *x = y1 - (b / a) * x1;
    *y = x1;
    return gcd;
}

ll modInverse(ll a, ll m) {
    ll x, y, res=-1;
    ll g = gcdExtended(a, m, &x, &y);
    if (g != 1) {
        //cout << "Inverse doesn't exist";
        res = -1;
    } else {
        // m is added to handle negative x
        res = (x % m + m) % m;
    }
    return res;
}

int lenOfLIS(vector<int>& v) {        
    int n = v.size(), len = 0;
    vector<int> dp(n,0);
    for (int num : v) {
        int i = lower_bound(dp.begin(), dp.begin()+len, num) - dp.begin();
        dp[i] = num;
        if (i == len) {
            len++;
        }
    }
    return len;        
}


#if 0
const int N = 1e6+4;  // limit for array size
int n;  // array size
int t[2 * N];

void build() {  // build the tree
  for (int i = n - 1; i > 0; --i) t[i] = max(t[i<<1], t[i<<1|1]);
}

void modify(int p, int value) {  // set value at position p
  for (t[p += n] = value; p > 1; p >>= 1) t[p>>1] = t[p] + t[p^1];
}

int query(int l, int r) {  // max on interval [l, r)
  int res = 0;
  for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
    if (l&1) res = max(res, t[l++]);
    if (r&1) res = max(res, t[--r]);
  }
  return res;
}
#endif

vector<int> SieveOfEratosthenes(int n) {
    bool prime[n+1];
    memset(prime, true, sizeof(prime));
  
    for (int p=2; p*p<=n; p++) {
        if (prime[p]) {
            for (int i=p*p; i<=n; i+=p)
                prime[i] = false;
        }
    }
    vector<int> v;
    for (int p=2; p<=n; p++)
        if (prime[p])
            v.push_back(p);
    return v;
}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);    
    int T=1, caseIdx=0;   
    //cin >> T;    
    while (T--) {
        //caseIdx++;
        const int M = 998244353;
        string s;
        cin >> s;
        if (s[0]==')') {
            cout << 0 << "\n";
            continue;
        }
        int n = s.length();
        //vector<ll> dp(n+1);
        map<ll,ll> mp;
        mp[1] = 1;
        for (int i=1; i<n; i++) {
            map<ll,ll> newmp;
            if (s[i]=='(') {
                for (auto it=mp.begin(); it!=mp.end(); it++) {
                    newmp[it->first+1] = it->second;
                }
            } else if (s[i]==')') {
                for (auto it=mp.begin(); it!=mp.end(); it++) {
                    if (it->first-1<0)
                        continue;
                    newmp[it->first-1] = it->second;
                }
            } else {
                for (auto it=mp.begin(); it!=mp.end(); it++) {
                    int up = it->first+1;
                    int down = it->first-1;
                    newmp[up] = (newmp[up] + it->second) % M;
                    if (down<0)
                        continue;
                    newmp[down] = (newmp[down] + it->second) % M;
                }
            }
            mp = newmp;
        }
        //printv(dp);
        //printmp(mp);
        ll ans = mp[0];
        
        //cout << fixed << setprecision(9);
        cout << ans << "\n";
        //cout << "Case #" << caseIdx << ": " << ans << "\n";   
    }
}

提出情報

提出日時
問題 D - Count Bracket Sequences
ユーザ llc5pg
言語 C++ (GCC 9.2.1)
得点 400
コード長 7057 Byte
結果 AC
実行時間 238 ms
メモリ 3772 KiB

コンパイルエラー

./Main.cpp:12: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
   12 | #pragma GCC optimization ("Ofast")
      | 
./Main.cpp: In function ‘int main()’:
./Main.cpp:232:14: warning: unused variable ‘caseIdx’ [-Wunused-variable]
  232 |     int T=1, caseIdx=0;
      |              ^~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 400 / 400
結果
AC × 3
AC × 24
セット名 テストケース
Sample sample00.txt, sample01.txt, sample02.txt
All sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt
ケース名 結果 実行時間 メモリ
sample00.txt AC 6 ms 3616 KiB
sample01.txt AC 2 ms 3492 KiB
sample02.txt AC 2 ms 3600 KiB
testcase00.txt AC 2 ms 3600 KiB
testcase01.txt AC 2 ms 3492 KiB
testcase02.txt AC 1 ms 3492 KiB
testcase03.txt AC 91 ms 3660 KiB
testcase04.txt AC 107 ms 3672 KiB
testcase05.txt AC 238 ms 3740 KiB
testcase06.txt AC 163 ms 3772 KiB
testcase07.txt AC 212 ms 3664 KiB
testcase08.txt AC 65 ms 3620 KiB
testcase09.txt AC 156 ms 3720 KiB
testcase10.txt AC 107 ms 3636 KiB
testcase11.txt AC 113 ms 3580 KiB
testcase12.txt AC 33 ms 3544 KiB
testcase13.txt AC 69 ms 3556 KiB
testcase14.txt AC 16 ms 3628 KiB
testcase15.txt AC 7 ms 3608 KiB
testcase16.txt AC 142 ms 3724 KiB
testcase17.txt AC 121 ms 3596 KiB
testcase18.txt AC 22 ms 3572 KiB
testcase19.txt AC 2 ms 3548 KiB
testcase20.txt AC 2 ms 3444 KiB