提出 #63017018


ソースコード 拡げる

#include <bits/stdc++.h>
#include <chrono>
using namespace std;
using namespace chrono;


// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
// template<class T> using oset =tree<T, null_type, less_equal<T>, rb_tree_tag,tree_order_statistics_node_update>;
 


// Aliases 
using ll = long long;
using ull = unsigned long long;
using ld = double;
 
 
// Constants
constexpr ll INF = 4e18;
constexpr ld EPS = 1e-9;  
constexpr ll MOD = 998244353; // 1e9+7
 
// Macros
#define F first
#define S second
#define all(x) begin(x), end(x)
#define allr(x) rbegin(x), rend(x)
typedef vector<int> vi;
typedef pair<int,int> pi;
// #define insert push_back
#define pb push_back
#define MP make_pair
#define endl '\n'
#define rep(i,a,b) for (int i = a; i < b; i++)

 


const ll mod = 998244353;
 
ll inv(ll i) {if (i == 1) return 1; return (mod - ((mod / i) * inv(mod % i)) % mod) % mod;}
 
ll mod_mul(ll a, ll b) {a = a % mod; b = b % mod; return (((a * b) % mod) + mod) % mod;}
 
ll mod_add(ll a, ll b) {a = a % mod; b = b % mod; return (((a + b) % mod) + mod) % mod;}
 
ll mod_sub(ll a, ll b) {a = a % mod; b = b % mod; return (((a - b + mod) % mod) + mod) % mod;}
  
ll ceil_div(ll a, ll b) {return a % b == 0 ? a / b : a / b + 1;}
 
ll pwr(ll a, ll b) {a %= mod; ll res = 1; while (b > 0) {if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1;} return res;}
 


vector<ll> sieve(int n) {int*arr = new int[n + 1](); vector<ll> vect; for (int i = 2; i <= n; i++)if (arr[i] == 0) {vect.push_back(i); for (int j = 2 * i; j <= n; j += i)arr[j] = 1;} return vect;}





template <typename T> // cin >> vector<T>
istream &operator>>(istream &istream, vector<T> &v)
{
    for (auto &it : v)
        cin >> it;
    return istream;
}
template <typename T> // cout << vector<T>
ostream &operator<<(ostream &ostream, const vector<T> &c)
{
    for (auto &it : c)
        cout << it << " ";
    return ostream;
}


 

// Mathematical functions
int GCD(int a, int b)
{
    while (b)
    {
        a %= b;
        swap(a, b);
    }
    return a;
}



int GCD_extended(int a, int b, int &x, int &y)
{
    x = 1, y = 0;
    int x1 = 0, y1 = 1, a1 = a, b1 = b;
    while (b1)
    {
        int q = a1 / b1;
        tie(x, x1) = make_tuple(x1, x - q * x1);
        tie(y, y1) = make_tuple(y1, y - q * y1);
        tie(a1, b1) = make_tuple(b1, a1 - q * b1);
    }
    return a1;
}



int LCM(int a, int b)
{
    return ((ll)a * b) / GCD(a, b);
}


ll modpow(ll x, ll n, int m = MOD)
{
    if (x == 0 && n == 0)
        return 0; // undefined case
    ll res = 1;
    while (n > 0)
    {
        if (n % 2)
            res = (res * x) % m;
        x = (x * x) % m;
        n /= 2;
    }
    return res;
}
 
int modinv(int x, int m = MOD)
{
    return modpow(x, m - 2, m);
}


 
mt19937 rng;
ll getRandomNumber(ll l, ll r)
{
    uniform_int_distribution<ll> dist(l, r);
    return dist(rng);
}

 
 
 
ll binToDec(string s) { return bitset<64>(s).to_ullong(); }
string decToBin(ll a) { return bitset<64>(a).to_string(); }


 
ll andOperator(ll a, ll b)
{
    ll shiftcount = 0;
 
    while (a != b and a > 0)
    {
        shiftcount++;
        a = a >> 1;
        b = b >> 1;
    }
    return int64_t(a << shiftcount);
}


ll factorial(ll n){
    if (n==0){
        return 1;
    }
    ll ans=1;
    for (ll i=1;i<=n;i++){
         ans=mod_mul(ans,i);
    }
    return ans;
}
 
 
 
ll lcm(ll a,ll b){
    ll g=__gcd(a,b);
    return (a*b/g);
}
 
 
long long int power(int base, int exp)
{
    if (exp == 0)
       return 1;
    else if (exp == 1)
       return base;
    else
    {
       long long int calc;
       if (exp % 2 == 0)
       {
         calc = power(base, exp/2);
         calc *= calc;
       }
       else
       {
         calc = base*power(base, exp-1);
       }
       return calc;
    }
}


class Compare {
public:
    bool operator()(pair<int,int> a, pair<int,int> b)
    {
        int diff=a.second-a.first;
        int diff2=b.second-b.first;
 
        if (diff == diff2) {
            return a.first>b.first;
        }
        
        
 
        return diff<diff2;
        }
};
 
bool get(ll a,ll b, ll x){
    if (a<b){
        swap(a,b);
    }
    if (x==a || x==b){
        return true;
    }
    if (a==0 || b==0){
        return false;
    }
    return get(a%b,b,x);
}
 
 
long long binpow(long long a, long long b, long long m) {
    a %= m;
    long long res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a % m;
        a = a * a % m;
        b >>= 1;
    }
    return res;
}
 

 
ll nCr(ll n, ll r,vector<ll>&f) {
    if (n<r){
        return 0;
    }
    ll ans=f[n];
    ans=mod_mul(ans,inv(f[r]));
    ans=mod_mul(ans,inv(f[n-r]));
    return ans;
}
 
 
ll mysqrt(ll n){
    ll ans=0;
    ll low=1;
    ll high=1e9;
    while(low<=high){
        ll md=(low+high)/2;
        if (md*md<=n){
            ans=md;
            low=md+1;
        }
        else{
            high=md-1;
        }
    }
    return ans;
}
 


bool cmp(pair<ll, ll>& a,
         pair<ll, ll>& b)
{
    return a.second < b.second;
} 



bool check(ll i,ll n,ll k){
   ll x=i;
   ll par=x/2+1;
   ll st=1+(par-1)*(n/i);
   ll en=st+n/i-1;
   if (((en+st)/2)==k){
        return true;
   }
   return false;

}





bool sortbysec(string &a,string &b){
    return a.length()<b.length();
}









void solve(){
    string s;
    cin>>s;
    ll n=s.length();
    map<char,ll>mp;
    map<char,char>rev;
    mp['(']=0;
    mp['[']=1;
    mp['<']=2;
    vector<stack<ll>>a(3);
    set<ll>st;
    for (int i=0;i<n;i++){
        if (mp.find(s[i])!=mp.end()){
            a[mp[s[i]]].push(i);
            st.insert(i);

        }
        else{
            if (s[i]==')'){
                if (a[0].size()==0){
                    // cout << i << endl;
                    cout << "No" << endl;return;
                }
                ll idx=a[0].top();
                auto it=st.upper_bound(idx);
                if (it!=st.end() && *it<i){
                    // cout << i << endl;
                    cout << "No" << endl;return;
                }
                st.erase(idx);
                a[0].pop();
            }
            else if (s[i]==']'){
                if (a[1].size()==0){
                     // cout << i << endl;
                    cout << "No" << endl;return;
                }
                ll idx=a[1].top();
                // cout << idx << endl;
                // cout << st.size() << endl;
                auto it=st.upper_bound(idx);
                if (it!=st.end() && *it<i){
                    // cout << i << endl;
                    cout << "No" << endl;return;
                }
                st.erase(idx);
                a[1].pop();

            }
            else if (s[i]=='>'){
                if (a[2].size()==0){
                    cout << "No" << endl;return;
                }
                ll idx=a[2].top();
                auto it=st.upper_bound(idx);
                if (it!=st.end() && *it<i){
                     // cout << i << endl;
                    cout << "No" << endl;return;
                }
                st.erase(idx);
                a[2].pop();
            }

        }
    }
    for (int i=0;i<3;i++){
        if (a[i].size()>0){
            // cout << "here" << endl;
            cout << "No" << endl;return;
        }
    }
    cout << "Yes" << endl;


}  
 



int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T;
    // cin>>T;
    T=1;
    auto start1 = high_resolution_clock::now();
    while(T--){
        solve();
    }
    auto stop1 = high_resolution_clock::now();
    auto duration = duration_cast<microseconds>(stop1 - start1);
    cerr << "Time: " << duration . count() / 1000 << " ms" << endl;
 
    return 0;
}

提出情報

提出日時
問題 D - Colorful Bracket Sequence
ユーザ an1ket_62
言語 C++ 20 (gcc 12.2)
得点 400
コード長 8211 Byte
結果 AC
実行時間 18 ms
メモリ 9152 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 400 / 400
結果
AC × 3
AC × 40
セット名 テストケース
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 1 ms 3344 KiB
example_01.txt AC 1 ms 3540 KiB
example_02.txt AC 1 ms 3492 KiB
hand_00.txt AC 18 ms 8876 KiB
hand_01.txt AC 5 ms 3632 KiB
hand_02.txt AC 17 ms 9152 KiB
hand_03.txt AC 1 ms 3620 KiB
hand_04.txt AC 17 ms 9024 KiB
hand_05.txt AC 1 ms 3460 KiB
hand_06.txt AC 1 ms 3484 KiB
random_00.txt AC 7 ms 6452 KiB
random_01.txt AC 18 ms 8468 KiB
random_02.txt AC 17 ms 8120 KiB
random_03.txt AC 16 ms 6368 KiB
random_04.txt AC 12 ms 8600 KiB
random_05.txt AC 15 ms 5816 KiB
random_06.txt AC 2 ms 3940 KiB
random_07.txt AC 8 ms 5152 KiB
random_08.txt AC 10 ms 6136 KiB
random_09.txt AC 16 ms 5768 KiB
random_10.txt AC 14 ms 3780 KiB
random_11.txt AC 14 ms 4084 KiB
random_12.txt AC 14 ms 4040 KiB
random_13.txt AC 9 ms 3828 KiB
random_14.txt AC 14 ms 3916 KiB
random_15.txt AC 6 ms 3692 KiB
random_16.txt AC 6 ms 3736 KiB
random_17.txt AC 2 ms 3648 KiB
random_18.txt AC 7 ms 3616 KiB
random_19.txt AC 3 ms 3648 KiB
random_20.txt AC 7 ms 3696 KiB
random_21.txt AC 7 ms 3628 KiB
random_22.txt AC 7 ms 3580 KiB
random_23.txt AC 7 ms 3632 KiB
random_24.txt AC 7 ms 3624 KiB
random_25.txt AC 3 ms 3652 KiB
random_26.txt AC 7 ms 3632 KiB
random_27.txt AC 7 ms 3612 KiB
random_28.txt AC 7 ms 3620 KiB
random_29.txt AC 5 ms 3616 KiB