Submission #251470

# Submission time Handle Problem Language Result Execution time Memory
251470 2020-07-21T10:44:59 Z leaked Retro (COCI17_retro) C++14
46 / 100
150 ms 102612 KB
#include<bits/stdc++.h>
using namespace std;
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
//
//    #pragma GCC optimize("unroll-loops")
//    #pragma GCC optimize("Ofast")
//    #pragma GCC optimize("-O3")
//    #pragma GCC optimize("no-stack-protector")
//    #pragma GCC optimize("fast-math")
//#define LOCAL
#define sim template < class c
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
  enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifndef LOCAL
~debug() { cerr << endl; }
eni(!=) cerr << boolalpha << i; ris; }
eni(==) ris << range(begin(i), end(i)); }
sim, class b dor(pair < b, c > d) {
  ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
  *this << "[";
  for (auto it = d.b; it != d.e; ++it)
	*this << ", " + 2 * (it == d.b) << *it;
  ris << "]";
}
#else
sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#define fi first
#define f first
#define se second
#define s second
#define vi_a vector<int>a;
#define p_b push_back
////////////////////////////////???????????????CHECK THIS OUT???????????????//////////////////////////////
#define ll long long
////////////////////////////////???????????????CHECK THIS OUT???????????????//////////////////////////////
#define ld long double
#define pll pair<ll,ll>
#define pii pair<int,int>
#define m_p make_pair
#define fast_io cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(0);
#define all(x) x.begin(),x.end()
#define getfiles    ifstream cin("input.txt");ofstream cout("output.txt");
#define pw(x) (1ll << x)
#define sz(x) (ll)x.size()
#define endl "\n"
#define rall(x) x.rbegin(),x.rend()
#define len(a) (ll)a.size()
#define rep(x,l,r) for(ll x=l;x<r;x++)

using namespace __gnu_pbds;
ld eps = (ld)1 / 1e6;
const ld pi=3.14159265359;
ll inf = 1e18,mod1=1e9+7;
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 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; }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const ll R=1e4;
const ll tx[4]={0,0,-1,1};
const ll ty[4]={-1,1,0,0};
const pii lol[3]={{-1,1},{-1,0},{-1,-1}};
const char rev_to[4]={'E','W','N','S'};
const int N=3e2+100;
const int M=1e9+7;
//typedef tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> st;
//int n,m,k;
//int a[N],b[N];
//int f[N],cnt[26],dp[N];
int dp[N][N][N];
char a[N][N];
signed main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<=n+1;i++){
        for(int j=0;j<=m+1;j++){
            a[i][j]='*';
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    int st=-1;
    for(int i=1;i<=m;i++){
        if(a[n][i]=='M') st=i;
    }
    dp[n][st][0]=1;
    for(int i=n;i>1;i--){
        for(int j=1;j<=m;j++){
            for(int bal=0;bal<=(n-i);bal++){
                if(!dp[i][j][bal]) continue;
                for(auto &z : lol){
                    int ni=z.f+i,nj=z.s+j;
                    if(a[ni][nj]!='*'){
                        if(a[ni][nj]=='.'){
                            dp[ni][nj][bal]=max(dp[ni][nj][bal],dp[i][j][bal]);
                        }
                        else if(a[ni][nj]==')'){
                            if(bal>0){
                                dp[ni][nj][bal-1]=max(dp[ni][nj][bal-1],dp[i][j][bal]+1);
                            }
                        }else{
                             dp[ni][nj][bal+1]=max(dp[ni][nj][bal+1],dp[i][j][bal]+1);
                        }
                    }
                }
            }
        }
    }
    pii mx={n,st};
    for(int i=n-1;i>=1;i--){
        for(int j=0;j<=m;j++){
            if(!dp[i][j][0]) continue;
            bool ok=0;
            for(auto &z : lol){
                int ni=z.f+i,nj=z.s+j;
                if(a[ni][nj]=='*'){
                    ok=1;
                }
            }
            if(ok){
                if(dp[i][j][0]>dp[mx.f][mx.s][0]){
                    mx={i,j};
                }
            }
        }
    }
    cout<<dp[mx.f][mx.s][0]-1<<endl;
    int bal=0;
    string s;
    while(mx.f!=n){
        int who=(a[mx.f][mx.s]==')' ? -1 : (a[mx.f][mx.s]=='('? 1 : 0));
        for(auto &z : lol){
            int ni=-z.f+mx.f,nj=-z.s+mx.s;
            if(dp[ni][nj][bal-who]==dp[mx.f][mx.s][bal]-abs(who)){
                if(who)s+=a[mx.f][mx.s];
                mx={ni,nj};
                bal-=who;
                break;
            }
        }
    }
//    s+=a[mx.f][mx.s];
    reverse(all(s));
     cout<<s;
    return 0;
}
/*
    4 4
    1 2 a
    3 2 a
    1 4 a
    3 4 b




*/
# Verdict Execution time Memory Grader output
1 Partially correct 1 ms 384 KB Partially correct
2 Correct 1 ms 512 KB Output is correct
3 Partially correct 1 ms 512 KB Partially correct
4 Partially correct 1 ms 640 KB Partially correct
5 Correct 1 ms 640 KB Output is correct
6 Partially correct 5 ms 5760 KB Partially correct
7 Partially correct 6 ms 5504 KB Partially correct
8 Partially correct 6 ms 5248 KB Partially correct
9 Partially correct 9 ms 9600 KB Partially correct
10 Partially correct 12 ms 11904 KB Partially correct
11 Partially correct 124 ms 91812 KB Partially correct
12 Partially correct 113 ms 84476 KB Partially correct
13 Partially correct 66 ms 51064 KB Partially correct
14 Partially correct 57 ms 49016 KB Partially correct
15 Partially correct 150 ms 98920 KB Partially correct
16 Partially correct 131 ms 90196 KB Partially correct
17 Partially correct 124 ms 91512 KB Partially correct
18 Partially correct 110 ms 84552 KB Partially correct
19 Partially correct 144 ms 102612 KB Partially correct
20 Partially correct 128 ms 94584 KB Partially correct