警示后人
查看原帖
警示后人
1036180
ChampionCyan楼主2024/7/19 19:05

每两个字母可能双向奔赴!!!

Hack:

abcd
acer
6
b c 100
c b 10
c x 1
e x 3
c e 7
r d 11

ans:

25
abxd

如代码中的

for (int i = 0; i < n; i++) {
	int dis1 = g[a[i] - 'a'][b[i] - 'a'];
	int dis2 = g[b[i] - 'a'][a[i] - 'a'];
	if (dis1 == 0x3f3f3f3f && dis2 == 0x3f3f3f3f) {
           cout << "-1" << endl;
           return 0 ;
       }
	if (dis1 < dis2)
		ans += dis1, a[i] = b[i];
	else
		ans += dis2, b[i] = a[i];
}

应该为:

for (int i = 0; i < (int)a.length(); i++) {
	int dis = 0x3f3f3f3f;
	char ch;
	for (int k = 0; k < 26; k++)
		if (dis > g[a[i] - 'a'][k] + g[b[i] - 'a'][k])
			dis = g[a[i] - 'a'][k] + g[b[i] - 'a'][k], ch = k + 'a';
	if (dis == 0x3f3f3f3f) {
		cout << "-1" << endl;
           return 0;
	}
	ans += dis;
	a[i] = ch;
}
2024/7/19 19:05
加载中...