zju 1900 ,不知道为什么超时了
今天突然被我读懂了zju1900这个题目的意思,我就试着写了一下,写得很烦琐,可是也没有料想到会超时,因为数据量很小. 不知道是不是输入那里有问题? 我不知道. 请高手指点咯..
http://acm.zju.edu.cn/show_problem.php?pid=1900
题目我是这样解的,一个二维数组,存的是每个人听到的树,然后对这个数组排序,然后再对排好序的数组对比是否相等,并计算不相等的数目.
代码如下. 不知道为什么会超时,不知道大家有没有别的办法?
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int equal(int *linefst ,int *linesec)
{
int i=0;
while(i<100 && linefst[i]==linesec[i]) i++;
if(i<100 && linefst[i]>linesec[i]) return 1;
if(i<100 && linefst[i]<linesec[i]) return -1;
return 0;
}
void turnline(int *linefst,int *linesec)
{
int temp[100];
memcpy(temp,linefst,sizeof(temp));
memcpy(linefst,linesec,sizeof(temp));
memcpy(linesec,temp,sizeof(temp));
}
void sortline(int map[][100],int line)
{
int i,j;
for(i=0;i<line;i++)
for(j=2;j<=(line-i);j++)
{
if( equal(map[j],map[j-1])==-1 )
{
turnline(map[j],map[j-1]);
}
}
}
void printmap(int map[][100],int P)
{
int i,j;
for(i=1;i<=P;i++,printf("\n"))
for(j=0;j<100;j++)
{
if(map[i][j]==1)
printf("%d\t",j);
}
}
int main()
{
int P,T;
int map[100][100];
char temp[10];
int person,tree;
int i,count;
while(gets(temp))
{
sscanf(temp,"%d%d%c",&P,&T);
memset(map,0,sizeof(map));
gets(temp);
while(strlen(temp)!=0)
{
sscanf(temp,"%d%d",&person,&tree);
map[person][tree]=1;
gets(temp);
}
sortline(map,P);
for(count=1,i=2;i<=P;i++)
{
if( equal(map[i],map[i-1])==0 )
count++;
}
//printmap(map,P);
printf("%d\n",count);
}
return 0;
}