Submission #418002

#TimeUsernameProblemLanguageResultExecution timeMemory
418002KULIKOLDSequence (BOI14_sequence)C++17
100 / 100
331 ms182208 KiB
//#pragma GCC optimize ("O3")
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define endl '\n'
const ll DIM = 1E5+7;
const ll DIV = 7;
const ll MAXN = 11;
const ll SZ = 1<<10;
const ll INF = 1E18;
ll A[DIM],dp[DIM][DIV][MAXN],dp1[DIM][DIV][MAXN],suf[DIM][DIV][MAXN],po[DIV];
ll F(ll num,ll digit){
    while(num){
        if (num%10==digit)
            return 0;
        num/=10;
    }
    return 1<<digit;
}
void anchor(){
    ll h;
    ++h;
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    po[0] = 1;
    for(ll i = 1;i<DIV;++i)
        po[i] = po[i-1]*10;
    ll n;
    cin>>n;
    for(ll i = 1;i<=n;++i){
        cin>>A[i];
    }
    for(ll i = 1;i<=n;++i){
        ll cur = 1<<A[i];
        for(ll div = 0;div<DIV;++div){
            for(ll num = 1;num<=10;++num){
                ll mask = 0;
                ll mask1 = 0;
                if (num>1 && i-po[div]>=1){
                    mask|=dp[i-po[div]][div][num-1]|F(po[div]*(num-1),A[i-po[div]]);
                    mask1|=dp1[i-po[div]][div][num-1]|F(po[div]*(num-1),A[i-po[div]]);
                }
                ll tmp = (SZ-1)^(1<<(num-1));
                ll tmp1 = tmp;
                if (num==1)
                    tmp = SZ-1;

                if (div>0){
                    if (num>1)
                        mask|=dp1[i][div-1][10]&tmp;
                    else mask|=dp[i][div-1][10]&tmp;
                    mask1|=dp1[i][div-1][10]&tmp1;
                }
                dp[i][div][num] = mask;
                dp1[i][div][num] = mask1;
            }

        }
    }
    for(ll i = n;i>=1;--i){
        ll cur = 1<<A[i];
        for(ll div = 0;div<DIV;++div){
            for(ll num = 0;num<=9;++num){
                ll mask = 0;
                if (num<9 && i+po[div]<=n){
                    mask|=suf[i+po[div]][div][num+1]|F(po[div]*(num+1),A[i+po[div]]);
                }
                ll tmp = (SZ-1)^(1<<num);
                if (div>0){
                    mask|=suf[i][div-1][0]&tmp;
                }
                suf[i][div][num] = mask;
            }
        }
    }
    ll ans = 0;
    for(ll r = 1;r<=1000;++r) {
        ll flag = 0;
        for (ll i = 1; i <= n; ++i) {
            if (F(r + i - 1, A[i]))
                flag = 1;
        }
        if (!flag){
            ans = r;
            break;
        }
    }
    ll res = INF;
    for(ll i = 1;i<=n;++i){
        for(ll div = 0;div<DIV;++div) {
            for (ll num = 1; num <= 9; ++num) {
                if (num * po[div] < i || po[div]*(10-num)-1+i<n)
                    continue;
                ll mask = F(po[div] * num, A[i]) | suf[i][div][num];
                if (num==1) {
                    mask |= dp1[i][div][num];
                    if(dp[i][div][num]!=dp1[i][div][num] && mask==0)
                        mask = 2;

                } else {
                    mask |= dp[i][div][num];
                }
                ll r = 0;
                if (mask == 1) {
                    r = 10;
                } else {
                    for (ll bit = 1; bit <= 9; ++bit) {
                        if (mask & (1 << bit)) {
                            r = r * 10 + bit;
                            if (mask & 1) {
                                r = r * 10;
                                mask ^= 1;
                            }
                        }
                    }
                }
                r = r * 10 + num;
                r*=po[div];
                r-=i-1;

                res = min(res,r);

            }
        }
    }

    cout<<res<<endl;
    return 0;
}

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:38:12: warning: unused variable 'cur' [-Wunused-variable]
   38 |         ll cur = 1<<A[i];
      |            ^~~
sequence.cpp:65:12: warning: unused variable 'cur' [-Wunused-variable]
   65 |         ll cur = 1<<A[i];
      |            ^~~
sequence.cpp:80:8: warning: variable 'ans' set but not used [-Wunused-but-set-variable]
   80 |     ll ans = 0;
      |        ^~~
sequence.cpp: In function 'void anchor()':
sequence.cpp:23:5: warning: 'h' is used uninitialized in this function [-Wuninitialized]
   23 |     ++h;
      |     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...