提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |