提出 #44634563


ソースコード 拡げる

#include <bits/stdc++.h>

using namespace std;

#define de(x) cout<<#x<<"="<<x<<endl

using ll = long long;

const int N = 51;
const int M = 1<<18;

ll n,l;
string s,t;
ll to[M][2][2];
ll dp[N][M];

void init(){
	// to_{msk,a,b}: you have msk, you want to get one a, you add b.
	for (ll msk=1; msk<(1<<l); msk++){
		ll len=0;
		while ((msk^(1<<len))>(1<<len)){
			len++;
		}
		len--;
//		de(len);
		// len=msk: first 1
		ll cur=len;
		while (~cur && (msk&(1ll<<cur))>0){
			cur--;
		}
//		cout<<"0: "<<cur<<endl;
		if (~cur){
			to[msk][0][0]=((msk&((1ll<<cur)-1))^(1ll<<cur));
			to[msk][0][0]<<=1ll;
			to[msk][0][1]=to[msk][0][0]^1;
		}
		cur=len;
		while (~cur && (msk&(1ll<<cur))==0){
			cur--;
		}
//		cout<<"1: "<<cur<<endl;
		if (~cur){
			to[msk][1][0]=((msk&((1ll<<cur)-1))^(1ll<<cur));
			to[msk][1][0]<<=1ll;
			to[msk][1][1]=to[msk][1][0]^1;
		}
//		cout<<msk<<": "<<to[msk][0][0]<<","<<to[msk][0][1]<<","<<to[msk][1][0]<<","<<to[msk][1][1]<<endl;
	}
}

void print(ll x){
	ll len=0;
	while ((x^(1ll<<len))>(1ll<<len)){
		len++;
	}
	len--;
	for (ll i=len; i>=0; i--){
		int t=(x>>i)&1;
		if (t){
			cout<<"X";
		}
		else{
			cout<<"Y";
		}
	}
	cout<<endl;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);

//	freopen("denverjin.in","r",stdin);
//	freopen("denverjin.out","w",stdout);
	cin>>n>>s>>t;
	l=(n+2)/3+1;
	init();
	// push
	dp[0][1]=1;
//	de(l);
	for (int i=0; i<n; i++){
		for (int msk=0; msk<(1ll<<l); msk++){
			if (dp[i][msk]==0){
				continue;
			}
			if (s[i]=='X' && t[i]=='X'){
				// use this
				dp[i+1][1]=max(dp[i+1][1],dp[i][msk]<<1ll|1);
				if (to[msk][1][1]!=0){
					// use before
					dp[i+1][to[msk][1][1]]=max(dp[i+1][to[msk][1][1]],dp[i][msk]<<1ll|1);
				}
				if (msk<(1<<l-1)){
					// no use
					dp[i+1][msk<<1ll|1]=max(dp[i+1][msk<<1ll|1],dp[i][msk]);
				}
			}
			else if (s[i]=='Y' && t[i]=='Y'){
				// use this
				dp[i+1][1]=max(dp[i+1][1],dp[i][msk]<<1ll);
				if (to[msk][0][0]!=0){
					// use before
					dp[i+1][to[msk][0][0]]=max(dp[i+1][to[msk][0][0]],dp[i][msk]<<1ll);
				}
				if (msk<(1<<l-1)){
					// no use
					dp[i+1][msk<<1ll]=max(dp[i+1][msk<<1ll],dp[i][msk]);
				}
			}
			else{
				// use x
				if (to[msk][1][0]!=0){
					dp[i+1][to[msk][1][0]]=max(dp[i+1][to[msk][1][0]],dp[i][msk]<<1ll|1);
				}
				// use y
				if (to[msk][0][1]!=0){
					dp[i+1][to[msk][0][1]]=max(dp[i+1][to[msk][0][1]],dp[i][msk]<<1ll);
				}
				// no use
				if (msk<(1<<l-1)){
					dp[i+1][msk<<1ll]=max(dp[i+1][msk<<1ll],dp[i][msk]);
					dp[i+1][msk<<1ll|1]=max(dp[i+1][msk<<1ll|1],dp[i][msk]);
				}
			}
		}
	}
	ll mx=0;
	for (int msk=1; msk<(1ll<<l); msk++){
		mx=max(mx,dp[n][msk]);
	}
//	de(mx);
	print(mx);
	return 0;
}

// don't waste time!!!

提出情報

提出日時
問題 F - XY Ladder LCS
ユーザ SFlyer
言語 C++ (GCC 9.2.1)
得点 900
コード長 2849 Byte
結果 AC
実行時間 120 ms
メモリ 83512 KiB

コンパイルエラー

./Main.cpp: In function ‘int main()’:
./Main.cpp:93:18: warning: suggest parentheses around ‘-’ inside ‘<<’ [-Wparentheses]
   93 |     if (msk<(1<<l-1)){
      |                 ~^~
./Main.cpp:105:18: warning: suggest parentheses around ‘-’ inside ‘<<’ [-Wparentheses]
  105 |     if (msk<(1<<l-1)){
      |                 ~^~
./Main.cpp:120:18: warning: suggest parentheses around ‘-’ inside ‘<<’ [-Wparentheses]
  120 |     if (msk<(1<<l-1)){
      |                 ~^~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 900 / 900
結果
AC × 3
AC × 81
セット名 テストケース
Sample 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt
All 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt, 01-026.txt, 01-027.txt, 01-028.txt, 01-029.txt, 01-030.txt, 01-031.txt, 01-032.txt, 01-033.txt, 01-034.txt, 01-035.txt, 01-036.txt, 01-037.txt, 01-038.txt, 01-039.txt, 01-040.txt, 01-041.txt, 01-042.txt, 01-043.txt, 01-044.txt, 01-045.txt, 01-046.txt, 01-047.txt, 01-048.txt, 01-049.txt, 01-050.txt, 01-051.txt, 01-052.txt, 01-053.txt, 01-054.txt, 01-055.txt, 01-056.txt, 01-057.txt, 01-058.txt, 01-059.txt, 01-060.txt, 01-061.txt, 01-062.txt, 01-063.txt, 01-064.txt, 01-065.txt, 01-066.txt, 01-067.txt, 01-068.txt, 01-069.txt, 01-070.txt, 01-071.txt, 01-072.txt, 01-073.txt, 01-074.txt, 01-075.txt, 01-076.txt, 01-077.txt, 01-078.txt
ケース名 結果 実行時間 メモリ
00-sample-001.txt AC 16 ms 3576 KiB
00-sample-002.txt AC 2 ms 3568 KiB
00-sample-003.txt AC 2 ms 3576 KiB
01-001.txt AC 2 ms 3460 KiB
01-002.txt AC 2 ms 3596 KiB
01-003.txt AC 2 ms 3524 KiB
01-004.txt AC 2 ms 3596 KiB
01-005.txt AC 2 ms 3460 KiB
01-006.txt AC 2 ms 3524 KiB
01-007.txt AC 2 ms 3536 KiB
01-008.txt AC 2 ms 3556 KiB
01-009.txt AC 59 ms 21384 KiB
01-010.txt AC 48 ms 16036 KiB
01-011.txt AC 54 ms 21216 KiB
01-012.txt AC 54 ms 21848 KiB
01-013.txt AC 17 ms 8008 KiB
01-014.txt AC 25 ms 10476 KiB
01-015.txt AC 31 ms 11900 KiB
01-016.txt AC 20 ms 9016 KiB
01-017.txt AC 10 ms 6152 KiB
01-018.txt AC 9 ms 5332 KiB
01-019.txt AC 12 ms 6788 KiB
01-020.txt AC 11 ms 6476 KiB
01-021.txt AC 54 ms 21880 KiB
01-022.txt AC 53 ms 20660 KiB
01-023.txt AC 57 ms 27076 KiB
01-024.txt AC 62 ms 31760 KiB
01-025.txt AC 24 ms 10776 KiB
01-026.txt AC 30 ms 14432 KiB
01-027.txt AC 20 ms 12984 KiB
01-028.txt AC 18 ms 11128 KiB
01-029.txt AC 53 ms 16276 KiB
01-030.txt AC 57 ms 24932 KiB
01-031.txt AC 65 ms 36200 KiB
01-032.txt AC 53 ms 16336 KiB
01-033.txt AC 54 ms 21796 KiB
01-034.txt AC 58 ms 28068 KiB
01-035.txt AC 69 ms 39960 KiB
01-036.txt AC 60 ms 20372 KiB
01-037.txt AC 57 ms 24484 KiB
01-038.txt AC 68 ms 33164 KiB
01-039.txt AC 120 ms 83512 KiB
01-040.txt AC 117 ms 81404 KiB
01-041.txt AC 62 ms 42628 KiB
01-042.txt AC 2 ms 3532 KiB
01-043.txt AC 3 ms 3580 KiB
01-044.txt AC 4 ms 3596 KiB
01-045.txt AC 2 ms 3496 KiB
01-046.txt AC 2 ms 3568 KiB
01-047.txt AC 2 ms 3612 KiB
01-048.txt AC 91 ms 60864 KiB
01-049.txt AC 77 ms 42380 KiB
01-050.txt AC 2 ms 3740 KiB
01-051.txt AC 89 ms 54960 KiB
01-052.txt AC 74 ms 36012 KiB
01-053.txt AC 5 ms 4548 KiB
01-054.txt AC 60 ms 22404 KiB
01-055.txt AC 9 ms 5128 KiB
01-056.txt AC 54 ms 19452 KiB
01-057.txt AC 15 ms 6160 KiB
01-058.txt AC 53 ms 17832 KiB
01-059.txt AC 54 ms 16908 KiB
01-060.txt AC 52 ms 16660 KiB
01-061.txt AC 10 ms 6224 KiB
01-062.txt AC 12 ms 6224 KiB
01-063.txt AC 11 ms 6164 KiB
01-064.txt AC 53 ms 19992 KiB
01-065.txt AC 52 ms 18236 KiB
01-066.txt AC 53 ms 17784 KiB
01-067.txt AC 17 ms 7800 KiB
01-068.txt AC 52 ms 16892 KiB
01-069.txt AC 50 ms 16816 KiB
01-070.txt AC 17 ms 7788 KiB
01-071.txt AC 54 ms 16700 KiB
01-072.txt AC 54 ms 16372 KiB
01-073.txt AC 50 ms 15496 KiB
01-074.txt AC 50 ms 15708 KiB
01-075.txt AC 50 ms 16004 KiB
01-076.txt AC 50 ms 15804 KiB
01-077.txt AC 50 ms 15604 KiB
01-078.txt AC 50 ms 15644 KiB