| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
感觉这道题的检测程序有瑕疵,不符合逆序数相同按原来的顺序排序测试数据:
10 7
ATCGATGCAT
GATCAGATTT
CCCGGGGGGA
ATCGATGCBT
AACATAGAGG
TTTTGGCCAA
TTTGGCCAAA
问题阐述:
我写的程序输入上面的数据时会有如下输出,为了方便查看,输出时加上了逆序数:
/***********************WA代码运行结果**********************
CCCGGGGGGA 9
AACATAGAGG 9
GATCAGATTT 11
ATCGATGCAT 17 ...............注意这里
ATCGATGCBT 17
TTTTGGCCAA 36
TTTGGCCAAA 37
很遗憾我的程序提交后显示的WA。
后来我在网上找了一份源码,提交后显示ACCEPT。用那段源码跑同样的数据会出现:
/*******************ACCEPT代码运行结果**********************
CCCGGGGGGA 9
AACATAGAGG 9
GATCAGATTT 11
ATCGATGCBT 17 ...............注意这里
ATCGATGCAT 17
TTTTGGCCAA 36
TTTGGCCAAA 37
可以看到两个程序结果的细微差别。逆序数同为17,两个的顺序发生了反转。
再看最初的输入:
ATCGATGCAT 在前
ATCGATGCBT 在后
显而易见,被系统否认的代码是正确的。
附:可能我的考虑不周到,说法有误,请大家指正,希望进一步学习。
附录有我的WA源码和网上找来的ACCEPT源码
####################################################################
####################################################################
附录
我的源代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 150
#define L 52
void main()
{
int nums, lens;
char str[N][L];
int i, j, k;
char temp[L];
int res[N];
memset(res, 0, sizeof(res));
scanf("%d%d", &lens, &nums);
for (i = 0; i < nums; i++)
scanf("%s", str[i]);
for (i = 0; i < nums; i++)
{
for (j = 0; j < lens - 1; j++)
{
for (k = j + 1; k < lens; k++)
{
if (str[i][k] < str[i][j])
res[i]++;
}
}
}
for (i = 0; i < nums - 1; i++)
{
k = i;
for (j = i + 1; j < nums; j++)
{
if (res[j] < res[k])
{
k = j;
}
}
if (k > i)
{
int temp = res[k];
char tmp[L];
strcpy(tmp, str[k]);
for (j = k; j > i; j--)
{
res[j] = res[j - 1];
strcpy(str[j], str[j - 1]);
}
res[i] = temp;
strcpy(str[i], tmp);
}
}
for (i = 0; i < nums; i++)
{
printf("%s\n", str[i]);
//printf(" %d\n", res[i]);
}
}
#######################################################################
#######################################################################
网上找来的ACCEPT源码:
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<stdlib.h>
using namespace std;
struct _stru_DNA
{
char String[52];
int Measure;
};
_stru_DNA DNA[110];
int n, m;
//计算第Index条DNA的Measure
void CountMeasure(int Index);
//DNA排序
void SortDNA();
int main(void)
{
int i;
scanf("%d%d", &n, &m);
for (i = 0; i<m; i++)
{
scanf("%s", DNA[i].String);
CountMeasure(i);
//printf("%d\n", DNA[i].Measure);
}
SortDNA();
for (i = 0; i<m; i++)
{
printf("%s ", DNA[i].String);
printf("%d\n", DNA[i].Measure);
}
system("pause");
return 0;
}
//计算第Index条DNA的Measure
void CountMeasure(int Index)
{
int i, j;
int Measure = 0;
for (i = 0; i<n - 1; i++)
{
if ('A' == DNA[Index].String[i])
{
continue;
}
for (j = i + 1; j<n; j++)
{
if (DNA[Index].String[i] > DNA[Index].String[j])
{
Measure++;
}
}
}
DNA[Index].Measure = Measure;
}
//DNA排序
void SortDNA()
{
int i, j;
int MinIndex;
_stru_DNA Tmp;
for (i = 0; i<m - 1; i++)
{
MinIndex = i;
for (j = i + 1; j<m; j++)
{
if (DNA[j].Measure < DNA[MinIndex].Measure)
{
MinIndex = j;
}
}
Tmp = DNA[i];
DNA[i] = DNA[MinIndex];
DNA[MinIndex] = Tmp;
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator