比赛 |
至少完成十道练习 |
评测结果 |
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;
}