社区讨论
1
UVA10129单词 Play on Words参与者 6已保存回复 25
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 25 条
- 当前快照
- 1 份
- 快照标识符
- @m440v2z9
- 此快照首次捕获于
- 2024/11/30 18:20 去年
- 此快照最后确认于
- 2024/11/30 20:31 去年
存个代码
CPP#include <iostream>
using namespace std;
int n, T, val;
int din[100005], dout[100005];
int p[30];
bool f, ok[30];
int find(int x)
{
if(x != p[x])
p[x] = find(p[x]);
return p[x];
}
int main()
{
//cin.tie(0);
cin >> T;
while(T--)
{
f = 0;
for(int i = 0;i <= 29; i++)
{
ok[i] = din[i] = dout[i] = 0;
p[i] = i;
}
// 输入数据
cin >> n;
for(int i = 1;i <= n; i++)
{
string str;
cin >> str;
int u, v;
u = str[0] - 'a' + 1;
v = str[str.size() - 1] - 'a' + 1;
dout[u]++;
din[v]++;
ok[u] = ok[v] = 1;
p[find(u)] = find(v);
}
// 处理数据
int curp = -1;
for(int i = 1;i <= 26; i++)
{
if(ok[i])
{
if(curp == -1)
{
curp = find(i);
}
else if(find(i) != curp)
{
printf("The door cannot be opened.\n");
f = 1;
break;
}
}
}
if(f)
continue;
// 判断
int ans1 = 0,ans2 = 0;
for(int i = 1;i <= 26; i++)
{
if(din[i] != dout[i])
{
if(abs(din[i] - dout[i]) == 1)
{
if(din[i] - dout[i] == 1)
ans1++;
else ans2++;
if(ans1 > 1 || ans2 > 1)
{
printf("The door cannot be opened.\n");
f = 1;
break;
}
}else{
printf("The door cannot be opened.\n");
f = 1;
break;
}
}
}
if(f)
continue;
if((ans1 == 1 && ans2 == 1) || (ans1 == 0 && ans2 == 0))
{
printf("Ordering is possible.\n");
}
else{
printf("The door cannot be opened.\n");
}
}
return 0;
}
回复
共 25 条回复,欢迎继续交流。
正在加载回复...