问题描述
- 新手问题,求高手解答
-
#include
#include
#include
typedef struct bitset *Set;
typedef struct bitset{
int setsize;
int arraysize;
int flag;
unsigned short *v;
}Bitset;
int ArrayIndex(int x)
{
return x>>4;
}Set SetInit(int size)
{
int i;
Set S=(Bitset *)malloc(sizeof *S);
S->setsize=size;
S->arraysize=(size+15)>>4;
S->v=(unsigned short *)malloc(S->arraysize*sizeof(unsigned short));
for(i=0;iarraysize;i++) S->v[i]=0;
S->flag=0;
return S;
}
void insert(Bitset *s,int a[3])
{
for(int i=0;i
if(a[i]>0&&a[i]>>4arraysize)
{
s->v[ArrayIndex(a[i])]|=~(1<<(a[i]&15));
}
}
int SetEqual(Set A,Set B)
{
int i,retval=1;
for(i=0;iarraysize;i++)
{
if(A->v[i]!=B->v[i]){retval=0;break;}
}
return retval;
}
int main()
{
// clock_t begin, duration;
// begin = clock();
int i;
int j;
int N,count;
Set *a;
count=0;
scanf("%d",&N);
a=(Set *)malloc(N*sizeof(Bitset));
// duration = clock() - begin;
// printf( "用时约: %d毫秒
", duration*1000 / CLOCKS_PER_SEC );
for( i=0;i
{
int j;
a[i]=SetInit(1000);
int b[3];
scanf("%d%d%d",&b[0],&b[1],&b[2]);
insert(a[i],b);
}
// duration = clock() - begin;
// printf( "创建完用时约: %d毫秒
", duration*1000 / CLOCKS_PER_SEC );
for( i=0;i
{
if(a[i]->flag==0)
{for( j=i+1;j<N;j++) { if(a[j]->flag==0) { if(SetEqual(a[i],a[j])) { a[j]->flag=1; } } } } }
// duration = clock() - begin;
// printf( "比较完用时约: %d毫秒
", duration*1000 / CLOCKS_PER_SEC );
for( i=0;i
{
if(a[i]->flag==0)
{
count++;
}
}
printf("%d
",count);
// duration = clock() - begin;
// printf( "计数完用时约: %d毫秒
", duration*1000 / CLOCKS_PER_SEC );free(a); return 0;
}
我这个代码超时,题目要求1000MS以内,跪求高手这个怎么改进,感激不尽。。。