Submission #1274288

#TimeUsernameProblemLanguageResultExecution timeMemory
1274288trinm01Building 4 (JOI20_building4)C++20
0 / 100
2 ms840 KiB
// #pragma GCC optimize("O3")
// #pragma GCC optimization("Ofast,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
using namespace std;

#define int long long 
#define ll long long
#define FOR(i, l, r) for (int i = (l); i <= (r); i++)
#define FOD(i, r, l) for (int i = (r); i >= (l); i--)
#define fi first
#define se second
#define pii pair<int, int>

const ll mod = 1e9 + 7;
const int MAXN = 1e6 + 5;
const ll oo = 1e18 + 7;  
const int base = 10;

int n;
int a[MAXN][2];

pii f[MAXN][2];
pii merge(pii a, pii b){
	return {min(a.fi, b.fi), max(a.se, b.se)};
}
pii dp(int i, int t){
	if(i>n*2){
		return {0, 0};
	}
	if(f[i][t].fi!=-1){
		return f[i][t];
	}
	
	pii ans={oo, -oo};
	if(a[i][0]>=a[i-1][t]){
		pii p=dp(i+1, 0);
		ans=merge(ans, {p.fi+1, p.se+1});
	}
	if(a[i][1]>=a[i-1][t]){
		ans=merge(ans, dp(i+1, 1));
	}
	return f[i][t]=ans;
}

int sum=0;
void trace(int i, int t){
	if(i>n*2){
		return;
	}
	
	pii ans=f[i][t];
	if(a[i][0]>=a[i-1][t] && sum+dp(i+1, 0).fi+1<=n && (dp(i+1, 0).fi+1>=ans.fi && dp(i+1, 0).se+1<=ans.se)){
		cout << 'A';
		sum++;
		trace(i+1, 0);
	}
	else{
		cout << 'B';
		trace(i+1, 1);
	}
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    
    // freopen("test.txt", "r", stdin);
    // freopen("o2.out", "w", stdout);

    if(fopen(".inp", "r")){
        freopen(".inp", "r", stdin);
        freopen(".out", "w", stdout);
    }

    cin >> n;
    FOR(i, 1, n*2){
    	cin >> a[i][0];
    }
    FOR(i, 1, n*2){
    	cin >> a[i][1];
    }

	FOR(i, 0, n*2+1){
		FOR(t, 0, 1){
			f[i][t].fi=-1;
		}
	}
	
	pii p=dp(1, 0);
	// cout << p.fi << ' ' << p.se << '\n';
	if(p.fi>n || p.se<n){
		cout << -1;
		return 0;
	}
	// cout << 1;
	trace(1, 0);
	    
    return 0;
}

Compilation message (stderr)

building4.cpp: In function 'int main()':
building4.cpp:74:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |         freopen(".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
building4.cpp:75:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |         freopen(".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...