Submission #476511

# Submission time Handle Problem Language Result Execution time Memory
476511 2021-09-27T12:52:01 Z hackerbhaiya Round words (IZhO13_rowords) C++17
28 / 100
135 ms 22084 KB
#include<bits/stdc++.h>
// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")
// #pragma GCC optimization("unroll-loops")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC optimize("fast-math")
// #pragma GCC optimize("no-stack-protector")
// #define ll __int128
#define ll long long
// #define ll int
#define f(i,a,b) for(int i=a;i<b;i++)
#define mod 1000000007
// #define mod 998244353 
#define mp make_pair
#define uniq(v) (v).erase(unique(all(v)),(v).end())
#define ff first
#define ss second
#define rf(i,a,b) for(int i=a;i>=b;i--)
#define sc(a) scanf("%lld",&a)
#define pf printf
#define sz(a) (int)(a.size())
#define psf push_front
#define ppf pop_front
#define ppb pop_back
#define pb push_back
#define pq priority_queue
#define all(s) s.begin(),s.end()
#define sp(a) setprecision(a)
#define rz resize
#define ld long double
#define inf (ll)1e18
#define ub upper_bound
#define lb lower_bound
#define bs binary_search
#define eb emplace_back
const double pi = acos(-1);
ll binpow(ll a, ll b){ll res=1;while(b!=0){if(b&1)res*=a;a*=a;b>>=1;}return res;}
// ll binpow(ll a, ll b, ll md){ll res=1;a%=mod;while(b!=0){if(b&1)res*=a,res%=md;a*=a,a%=md;b>>=1;}return res%md;}
 
using namespace std;

vector<vector<int> > dp,dir;
string a,b;
int n,m;

void init()
{
    f(i,0,n)
    {
        f(j,0,m)
            dp[i][j]=dir[i][j]=0;
    }
    f(i,1,n)
    {
        f(j,1,m)
        {
            if(a[i]==b[j])
                dp[i][j]=1+dp[i-1][j-1],dir[i][j]=1;
            if(dp[i][j-1]>=dp[i-1][j] && dp[i][j]<=dp[i][j-1])
                dp[i][j]=dp[i][j-1],dir[i][j]=0;
            else if(dp[i][j]<=dp[i-1][j])
                dp[i][j]=dp[i-1][j],dir[i][j]=2;
        }
    }
}

int cal(int i, int j)
{
    int ans=0;
    while(i>0 && j>0)
    {
        if(i<0 || j<0)
            return ans;
        if(dir[i][j]==1)
            ans++,i--,j--;
        else if(dir[i][j]==0)
            j--;
        else
            i--;
    }
    return ans;
}

void update(int id)
{
    int i=id,j=1;
    while(j<m && dir[i][j]!=1)
        j++;
    if(j>=m)
        return;
    dir[i][j]=0;
    if(j==1)
        return;
    while(i<n-1 && j<m-1)
    {
        if(dir[i+1][j]==2)
            i++,dir[i][j]=0;
        else if(dir[i+1][j+1]==1)
            i++,j++,dir[i][j]=0;
        else
            j++;
    }
    while(i<n && j<m)
    {
        if(dir[i+1][j]==2)
            i++,dir[i][j]=0;
        else
            break;
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    // freopen("xortransform.in","r",stdin);
    // freopen("xortransform.out","w",stdout);
// #ifndef ONLINE_JUDGE
//     freopen("input.txt","r",stdin);
//     freopen("output.txt","w",stdout);
// #endif
    int z=1;
    // cin>>z;
    f(i,1,z+1)
    {
        //cout<<"Case #"<<i<<": ";
        cin>>a>>b;
        string tempa=a,tempb=b;
        int dif=sz(tempa);
        a="#"+tempa+tempa,b="$"+tempb;
        n=sz(a),m=sz(b);
        dp.rz(n,vector<int> (m)),dir.rz(n+1,vector<int> (m+1));
        init();
        int ans=cal(dif,m-1),cur=dif+1;
        f(i,2,n)
        {
            if(cur>=n)
                break;
            update(i-1);
            ans=max(ans,cal(cur,m-1)),cur++;
        }
        reverse(all(tempa));
        a="#"+tempa+tempa;
        init();
        ans=max(ans,cal(dif,m-1)),cur=dif+1;
        f(i,2,n)
        {
            if(cur>=n)
                break;
            update(i-1);
            ans=max(ans,cal(cur,m-1)),cur++;
        }
        cout<<ans<<"\n";
    }
} 
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Incorrect 1 ms 332 KB Output isn't correct
6 Correct 12 ms 2040 KB Output is correct
7 Correct 32 ms 16128 KB Output is correct
8 Incorrect 86 ms 16128 KB Output isn't correct
9 Incorrect 83 ms 16076 KB Output isn't correct
10 Incorrect 78 ms 16020 KB Output isn't correct
11 Incorrect 81 ms 17716 KB Output isn't correct
12 Correct 99 ms 20632 KB Output is correct
13 Incorrect 135 ms 20648 KB Output isn't correct
14 Incorrect 98 ms 18508 KB Output isn't correct
15 Incorrect 117 ms 22084 KB Output isn't correct
16 Incorrect 97 ms 17784 KB Output isn't correct
17 Incorrect 73 ms 13528 KB Output isn't correct
18 Incorrect 129 ms 21156 KB Output isn't correct
19 Incorrect 71 ms 16076 KB Output isn't correct
20 Incorrect 116 ms 18836 KB Output isn't correct
21 Incorrect 40 ms 4556 KB Output isn't correct
22 Incorrect 58 ms 7700 KB Output isn't correct
23 Incorrect 65 ms 10508 KB Output isn't correct
24 Incorrect 83 ms 11084 KB Output isn't correct
25 Incorrect 114 ms 14796 KB Output isn't correct