Submission #443111

# Submission time Handle Problem Language Result Execution time Memory
443111 2021-07-09T17:43:24 Z cheetose Building 4 (JOI20_building4) C++17
100 / 100
529 ms 120612 KB
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define X first
#define Y second
#define y0 y12
#define y1 y22
#define INF 987654321
#define PI 3.141592653589793238462643383279502884
#define fup(i,a,b,c) for(int (i)=(a);(i)<=(b);(i)+=(c))
#define fdn(i,a,b,c) for(int (i)=(a);(i)>=(b);(i)-=(c))
#define MEM0(a) memset((a),0,sizeof(a))
#define MEM_1(a) memset((a),-1,sizeof(a))
#define ALL(a) a.begin(),a.end()
#define COMPRESS(a) sort(ALL(a));a.resize(unique(ALL(a))-a.begin())
#define SYNC ios_base::sync_with_stdio(false);cin.tie(0)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef double db;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll> Pll;
typedef pair<ld, ld> Pd;
typedef vector<int> Vi;
typedef vector<ll> Vll;
typedef vector<ld> Vd;
typedef vector<Pi> VPi;
typedef vector<Pll> VPll;
typedef vector<Pd> VPd;
typedef tuple<int, int, int> iii;
typedef tuple<int, int, int, int> iiii;
typedef tuple<ll, ll, ll> LLL;
typedef vector<iii> Viii;
typedef vector<LLL> VLLL;
typedef complex<double> base;
const int MOD = 1000000021;
ll POW(ll a, ll b, ll MMM = MOD) { ll ret = 1; for (; b; b >>= 1, a = (a*a) % MMM)if (b & 1)ret = (ret*a) % MMM; return ret; }
int dx[] = { 0,1,0,-1,1,1,-1,-1 }, dy[] = { 1,0,-1,0,1,-1,1,-1 };
int ddx[] = { -1,-2,1,-2,2,-1,2,1 }, ddy[] = { -2,-1,-2,1,-1,2,1,2 };

int a[2][1000005];
int d1[2][1000005],d2[2][1000005];
int n;
int go1(int k,int N){
	if(N==2*n)return 0;
	int &ret=d1[k][N];
	if(~ret)return ret;
	ret=-INF;
	if(a[k][N]<=a[0][N+1])ret=max(ret,1+go1(0,N+1));
	if(a[k][N]<=a[1][N+1])ret=max(ret,go1(1,N+1));
	return ret;
}
int go2(int k,int N){
	if(N==2*n)return 0;
	int &ret=d2[k][N];
	if(~ret)return ret;
	ret=-INF;
	if(a[k][N]<=a[0][N+1])ret=max(ret,go2(0,N+1));
	if(a[k][N]<=a[1][N+1])ret=max(ret,1+go2(1,N+1));
	return ret;
}
vector<char> ans;
void track(int k,int N,int remA,int remB){
	if(N==2*n)return;
	if(a[k][N]<=a[0][N+1]){
		if(remA-1<=go1(0,N+1) && remB<=go2(0,N+1)){
			ans.pb('A');
			track(0,N+1,remA-1,remB);
			return;
		}
	}
	if(a[k][N]<=a[1][N+1]){
		if(remA<=go1(1,N+1) && remB-1<=go2(1,N+1)){
			ans.pb('B');
			track(1,N+1,remA,remB-1);
			return;
		}
	}
}
int main(){
	MEM_1(d1);MEM_1(d2);
	scanf("%d",&n);
	fup(i,1,2*n,1)scanf("%d",&a[0][i]);
	fup(i,1,2*n,1)scanf("%d",&a[1][i]);
	//if(go1(0,0)<n || go2(0,0)<n)return !printf("-1\n");
	track(0,0,n,n);
	if(ans.size()!=2*n)return !printf("-1\n");
	for(char c:ans)printf("%c",c);
}

Compilation message

building4.cpp: In function 'int main()':
building4.cpp:10:30: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   10 | #define fup(i,a,b,c) for(int (i)=(a);(i)<=(b);(i)+=(c))
      |                              ^
building4.cpp:85:2: note: in expansion of macro 'fup'
   85 |  fup(i,1,2*n,1)scanf("%d",&a[0][i]);
      |  ^~~
building4.cpp:10:30: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   10 | #define fup(i,a,b,c) for(int (i)=(a);(i)<=(b);(i)+=(c))
      |                              ^
building4.cpp:86:2: note: in expansion of macro 'fup'
   86 |  fup(i,1,2*n,1)scanf("%d",&a[1][i]);
      |  ^~~
building4.cpp:89:15: warning: comparison of integer expressions of different signedness: 'std::vector<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   89 |  if(ans.size()!=2*n)return !printf("-1\n");
      |     ~~~~~~~~~~^~~~~
building4.cpp:84:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |  scanf("%d",&n);
      |  ~~~~~^~~~~~~~~
building4.cpp:85:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   85 |  fup(i,1,2*n,1)scanf("%d",&a[0][i]);
      |                ~~~~~^~~~~~~~~~~~~~~
building4.cpp:86:21: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   86 |  fup(i,1,2*n,1)scanf("%d",&a[1][i]);
      |                ~~~~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 8 ms 15948 KB Output is correct
2 Correct 8 ms 15880 KB Output is correct
3 Correct 8 ms 15948 KB Output is correct
4 Correct 8 ms 15948 KB Output is correct
5 Correct 8 ms 15948 KB Output is correct
6 Correct 9 ms 16220 KB Output is correct
7 Correct 9 ms 16152 KB Output is correct
8 Correct 9 ms 16204 KB Output is correct
9 Correct 9 ms 16184 KB Output is correct
10 Correct 9 ms 16244 KB Output is correct
11 Correct 9 ms 16204 KB Output is correct
12 Correct 10 ms 16256 KB Output is correct
13 Correct 10 ms 16204 KB Output is correct
14 Correct 9 ms 16204 KB Output is correct
15 Correct 9 ms 16284 KB Output is correct
16 Correct 9 ms 16300 KB Output is correct
17 Correct 9 ms 16204 KB Output is correct
18 Correct 9 ms 16204 KB Output is correct
19 Correct 9 ms 16220 KB Output is correct
20 Correct 9 ms 16236 KB Output is correct
21 Correct 9 ms 16204 KB Output is correct
22 Correct 9 ms 16204 KB Output is correct
23 Correct 9 ms 16204 KB Output is correct
24 Correct 9 ms 16204 KB Output is correct
25 Correct 9 ms 16332 KB Output is correct
26 Correct 9 ms 16204 KB Output is correct
27 Correct 9 ms 16204 KB Output is correct
28 Correct 9 ms 16260 KB Output is correct
29 Correct 9 ms 16332 KB Output is correct
30 Correct 9 ms 16228 KB Output is correct
31 Correct 10 ms 16332 KB Output is correct
32 Correct 9 ms 16244 KB Output is correct
33 Correct 9 ms 16332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 15948 KB Output is correct
2 Correct 8 ms 15880 KB Output is correct
3 Correct 8 ms 15948 KB Output is correct
4 Correct 8 ms 15948 KB Output is correct
5 Correct 8 ms 15948 KB Output is correct
6 Correct 9 ms 16220 KB Output is correct
7 Correct 9 ms 16152 KB Output is correct
8 Correct 9 ms 16204 KB Output is correct
9 Correct 9 ms 16184 KB Output is correct
10 Correct 9 ms 16244 KB Output is correct
11 Correct 9 ms 16204 KB Output is correct
12 Correct 10 ms 16256 KB Output is correct
13 Correct 10 ms 16204 KB Output is correct
14 Correct 9 ms 16204 KB Output is correct
15 Correct 9 ms 16284 KB Output is correct
16 Correct 9 ms 16300 KB Output is correct
17 Correct 9 ms 16204 KB Output is correct
18 Correct 9 ms 16204 KB Output is correct
19 Correct 9 ms 16220 KB Output is correct
20 Correct 9 ms 16236 KB Output is correct
21 Correct 9 ms 16204 KB Output is correct
22 Correct 9 ms 16204 KB Output is correct
23 Correct 9 ms 16204 KB Output is correct
24 Correct 9 ms 16204 KB Output is correct
25 Correct 9 ms 16332 KB Output is correct
26 Correct 9 ms 16204 KB Output is correct
27 Correct 9 ms 16204 KB Output is correct
28 Correct 9 ms 16260 KB Output is correct
29 Correct 9 ms 16332 KB Output is correct
30 Correct 9 ms 16228 KB Output is correct
31 Correct 10 ms 16332 KB Output is correct
32 Correct 9 ms 16244 KB Output is correct
33 Correct 9 ms 16332 KB Output is correct
34 Correct 285 ms 30876 KB Output is correct
35 Correct 448 ms 115608 KB Output is correct
36 Correct 425 ms 113976 KB Output is correct
37 Correct 429 ms 116024 KB Output is correct
38 Correct 443 ms 116024 KB Output is correct
39 Correct 432 ms 115440 KB Output is correct
40 Correct 456 ms 112044 KB Output is correct
41 Correct 491 ms 117348 KB Output is correct
42 Correct 455 ms 114784 KB Output is correct
43 Correct 463 ms 107032 KB Output is correct
44 Correct 462 ms 106960 KB Output is correct
45 Correct 459 ms 107060 KB Output is correct
46 Correct 471 ms 107116 KB Output is correct
47 Correct 461 ms 119688 KB Output is correct
48 Correct 448 ms 120612 KB Output is correct
49 Correct 449 ms 110744 KB Output is correct
50 Correct 463 ms 118764 KB Output is correct
51 Correct 464 ms 118840 KB Output is correct
52 Correct 392 ms 111668 KB Output is correct
53 Correct 386 ms 111756 KB Output is correct
54 Correct 404 ms 111668 KB Output is correct
55 Correct 393 ms 111472 KB Output is correct
56 Correct 529 ms 107040 KB Output is correct
57 Correct 446 ms 118076 KB Output is correct
58 Correct 444 ms 118604 KB Output is correct
59 Correct 420 ms 118616 KB Output is correct
60 Correct 393 ms 112824 KB Output is correct
61 Correct 430 ms 119100 KB Output is correct
62 Correct 439 ms 117708 KB Output is correct
63 Correct 425 ms 119196 KB Output is correct
64 Correct 413 ms 115632 KB Output is correct
65 Correct 468 ms 119092 KB Output is correct