社区讨论
90分,点#3,与一个问题
P4290[HAOI2008] 玩具取名参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @locdyiw6
- 此快照首次捕获于
- 2023/10/30 12:14 2 年前
- 此快照最后确认于
- 2023/11/04 23:55 2 年前
排查了好几遍,找不到问题。。。
等一个大佬
CPP#include <cstdio>
#include <cstring>
const int MAXN = 202;
int w,i,n,g;
bool r[4][4][4] = {false};
char s[MAXN];
int a[MAXN];
int N;
inline int tr(char c){
if(c == 'W') return 0;
if(c == 'I') return 1;
if(c == 'N') return 2;
if(c == 'G') return 3;
}
inline void ipt(int n,int n1){
for(int i = 1; i <= n ; i ++){
char c = getchar();
char c2 = getchar();
getchar();
//printf("|%c|%c|\n",c,c2);
r[tr(c)][tr(c2)][n1] = true;
//r[tr(c2)][tr(c)][n1] = true;
}
}
bool f[MAXN][MAXN][4] = {false};
int main()
{
scanf("%d%d%d%d",&w,&i,&n,&g);
getchar();
ipt(w,0);
ipt(i,1);
ipt(n,2);
ipt(g,3);
scanf("%s",s);
int N = strlen(s);
for(int i = 0 ; i < N ; i ++){
a[i+1] = tr(s[i]);
}
f[1][1][a[1]] = true;
for(int i = 2; i <= N ; i++){//预处理
f[i][i][a[i]] = true;
for(int j = 0 ; j <4 ; j++){
if(r[a[i-1]][a[i]][j] == false) continue;
f[i-1][i][j] = true;
}
}
for(int i = 1; i <= N ; i ++){
for(int j = i+2;j <= N; j ++){
for(int k = i; k < j ; k++){
for(int l = 0 ; l < 4 ; l++){
for(int m = 0 ; m < 4; m++){
for(int q = 0 ; q < 4 ; q++){
if(f[i][k][m] == false || f[k+1][j][q] == false || r[m][q][l] == false) continue;
f[i][j][l] = true;
}
}
}
}
}
}
int cnt = 0;
if(f[1][N][0] == true) { printf("W"); cnt++;}
if(f[1][N][1] == true) {printf("I"); cnt++;}
if(f[1][N][2] == true) {printf("N"); cnt++;}
if(f[1][N][3] == true) {printf("G"); cnt++;}
if(cnt == 0) printf("The name is wrong!");
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...