手动测试NOI2001的数据,全部通过,但是提交不知道为什么WA.好烦!

#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <memory.h>
#include <string>
using namespace std;
struct ELEM {
char t[6];
short pos;
short dep;
ELEM(char k[6], short p, short d) {
for (int i=0; i<6; i++)
t[i]=k[i];
pos = p;
dep = d;
}
ELEM() {}
};
char ti[6], tm[6];
char maxchar, minchar;
short ht[6000000];
ELEM que[6000000];
short ans;
bool isans = false;
int head, tail;

void inline dealnode(ELEM &p) {
int k = p.pos * 1000000 + p.t[0] * 100000 + p.t[1] * 10000 + p.t[2] * 1000 + p.t[3] * 100 + p.t[4] * 10 + p.t[5];
if (ht[k] * p.dep > 0)
return;
else if (ht[k] * p.dep < 0) {
ans = abs(ht[k]) + abs(p.dep) - 2;
isans = true;
return;
}
ht[k] = p.dep;
que[tail++] = p;
};

int main() {
scanf("%s%s", ti, tm);
maxchar = ti[0] - 48;
minchar = ti[0] - 48;
for (int i = 0; i < 6; i++) {
ti[i] -= 48;
tm[i] -= 48;
maxchar = maxchar > ti[i] ? maxchar : ti[i];
minchar = minchar < ti[i] ? minchar : ti[i];
maxchar = maxchar > tm[i] ? maxchar : tm[i];
minchar = minchar < tm[i] ? minchar : tm[i];
}
ELEM p0(ti, 0, 1);
ELEM p1(tm, 0, -1);
ELEM p2(tm, 1, -1);
ELEM p3(tm, 2, -1);
ELEM p4(tm, 3, -1);
ELEM p5(tm, 4, -1);
ELEM p6(tm, 5, -1);
dealnode(p0);
dealnode(p1);
dealnode(p2);
dealnode(p3);
dealnode(p4);
dealnode(p5);
dealnode(p6);
while (!isans) {
ELEM p = que[head++];
if (p.dep >= 0)
p.dep++;
else
p.dep--;
// swap0
if (p.pos != 0) {
swap(p.t[p.pos], p.t[0]);
dealnode(p);
swap(p.t[p.pos], p.t[0]);
}
// swap 1
if (p.pos != 5) {
swap(p.t[p.pos], p.t[5]);
dealnode(p);
swap(p.t[p.pos], p.t[5]);
}
// up
if (p.t[p.pos] < maxchar) {
p.t[p.pos]++;
dealnode(p);
p.t[p.pos]--;
}
// down
if (p.t[p.pos] > minchar) {
p.t[p.pos]--;
dealnode(p);
p.t[p.pos]++;
}
// left
if (p.pos > 0) {
p.pos--;
dealnode(p);
p.pos++;
}
// Right
if (p.pos < 5) {
p.pos++;
dealnode(p);
p.pos--;
}
}
cout << ans;
return 0;
}

0 条评论

目前还没有评论...

信息

ID
1673
难度
7
分类
搜索 点击显示
标签
递交数
581
已通过
90
通过率
15%
被复制
3
上传者