比赛 至少完成十道练习 评测结果 AAAAAAAAAA
题目名称 美丽的感觉 最终得分 100
用户昵称 Regnig Etalsnart 运行时间 0.079 s
代码语言 C++ 内存使用 11.88 MiB
提交时间 2017-05-21 13:29:12
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;

int N;
char A[1005],B[1005];
int F[1005][1005][3];

void DP()
{
    memset(F,false,sizeof(F));
    F[0][0][1]=true; 
    for (int i=0; i<=N; i++)
        for (int j=0; j<=N; j++)
            for (int k=0; k<=2; k++)
            {
                if ((i==N) && (j==N)) break;
                if (!F[i][j][k]) continue;
                //在第一堆取 
                if (i<N)
                {
                        int tmp=k;
                        if (A[i+1]=='0') tmp++; else tmp--;
                        if ((tmp>=0) && (tmp<=2)) F[i+1][j][tmp]=true;
                } 
                //在第二堆取 
                if (j<N)
                {
                        int tmp=k;
                        if (B[j+1]=='0') tmp++; else tmp--;
                        if ((tmp>=0) && (tmp<=2)) F[i][j+1][tmp]=true;    
                }
            }
    if (F[N][N][0]||F[N][N][1]||F[N][N][2]) printf("Accepted!\n");
    else printf("Impossible!\n");
}

int main()
{
    freopen("card_.in","r",stdin);
    freopen("card_.out","w",stdout);
    scanf("%d",&N);
    scanf("%s",A+1);
    scanf("%s",B+1);
    DP();
    return 0;
}