不明确的排列问题代码:PERMUT2(codechef)
检查歧义排列 输入: 输入包含几个测试用例。 每个测试用例的第一行包含一个整数n(1≤ N≤ 100000). 然后在下一行中出现整数1到n的排列。连续整数之间正好有一个空格字符。您可以假设1和n之间的每个整数在排列中正好出现一次。 最后一个测试用例后面是一个零 输出: 对于每个测试用例输出,无论排列是否不明确。遵循示例输出中显示的格式 我的输出是正确的,但是代码在提交时返回了错误的答案。不知道怎么了不明确的排列问题代码:PERMUT2(codechef),c,algorithm,C,Algorithm,检查歧义排列 输入: 输入包含几个测试用例。 每个测试用例的第一行包含一个整数n(1≤ N≤ 100000). 然后在下一行中出现整数1到n的排列。连续整数之间正好有一个空格字符。您可以假设1和n之间的每个整数在排列中正好出现一次。 最后一个测试用例后面是一个零 输出: 对于每个测试用例输出,无论排列是否不明确。遵循示例输出中显示的格式 我的输出是正确的,但是代码在提交时返回了错误的答案。不知道怎么了 int main(void) { int n, i, c, d; while
int main(void) {
int n, i, c, d;
while(scanf("%d", &n), n!=0){
c=0;
int a[n];
for(i=0; i<n; i++){
scanf("%ld", &a[i]);
c=c*10+a[i];
}
i=n;
int b[n];
while(i>0){
b[a[i-1]-1]=i;
--i;
}
d=0;
for(i=0; i<n; i++){
d=d*10+b[i];
}
c==d ? printf("ambiguous\n") : printf("not ambiguous\n");
}
return 0;
}
内部主(空){
int n,i,c,d;
而(scanf(“%d”,&n),n!=0){
c=0;
int a[n];
对于(i=0;i0){
b[a[i-1]-1]=i;
--一,;
}
d=0;
对于(i=0;i我理解您的思维过程,排列所代表的和和与逆排列所代表的和应该是相同的,但这并非在所有情况下都是正确的,因为可能存在一些排列,它们的和是相等的,但它们并不含糊
一种更简单、更稳健的方法是检查排列的每个元素是否与逆排列匹配
检查以下代码,该代码在Codechef上已接受状态:
#include<stdio.h>
int main(void) {
int n, i;
while(scanf("%d", &n), n!=0){
int a[n];
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
i=n;
int b[n];
while(i>0){
b[a[i-1]-1]=i;
--i;
}
int flg = 1;
for(int i=0;i<n;i++){
if(a[i]!=b[i]){
flg = 0;
break;
}
}
(flg==1) ? printf("ambiguous\n") : printf("not ambiguous\n");
}
return 0;
}
#包括
内部主(空){
int n,i;
而(scanf(“%d”,&n),n!=0){
int a[n];
对于(i=0;i0){
b[a[i-1]-1]=i;
--一,;
}
int flg=1;
对于(int i=0;iscanf(“%ld”,&a[i])
的类型错误。代码丢失了#include
即使在更正后,我也会得到相同的代码error@SarvashwaKrSingh,请看一看我的回答什么是模糊排列?@Sarvashwa Kr Singh,这解决了你的问题吗?如果是,请你在不回答的向上投票按钮下方标记正确答案阿利尔,我明白你的意思,谢谢!