| ||||||||||
| 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 | |||||||||
TLE,牛人指点下啊!谢谢了!# include < stdio.h >
# include < string.h >
typedef struct
{
int hash1;
int hash2;
}Hash;
Hash hash[10000];
int tab[10000];
int x, y;
//当前冲突的单元 and 要放进的值
int solve ( int slot, int value )
{
int temp;
temp = tab[slot];
tab[slot] = value;
//被替换区域任何一个可以使用则将被替换的放入
if ( tab[hash[temp-1].hash1] == 0 )
{
tab[hash[temp-1].hash1] = temp;
return 1;
}
if ( tab[hash[temp-1].hash2] == 0 )
{
tab[hash[temp-1].hash2] = temp;
return 1;
}
//选择和slot不一样的单元递归下一个处理
if ( slot == hash[temp-1].hash1 )
{
//和初始的情况相同则返回0,发现循环
if ( hash[temp-1].hash2 == x && temp == y )
return 0;
//否则递归下一个处理过程
else
return solve ( hash[temp-1].hash2, temp );
}
else
{
if ( hash[temp-1].hash1 == x && temp == y )
return 0;
else
return solve ( hash[temp-1].hash1, temp );
}
}
int main ()
{
int t, i, j, m, n;
scanf ( "%d", &t );
for ( i = 0; i < t; i ++ )
{
scanf ( "%d%d", &m, &n );
for ( j = 0; j < m; j ++ )
scanf ( "%d%d", &hash[j].hash1, &hash[j].hash2) ;
memset ( tab, 0, sizeof ( int ) * m );
for ( j = 0; j < m; j++ )
{
//如果没有可放入,则直接放入并处理下一个
if ( tab[hash[j].hash1] == 0 )
{
tab[hash[j].hash1] = j + 1;
if ( j == m - 1 )
puts ( "successful hashing" );
continue;
}
if ( tab[hash[j].hash2] == 0 )
{
tab[hash[j].hash2] = j + 1;
if ( j == m - 1 )
puts ( "successful hashing" );
continue;
}
x= hash[j].hash1;
y = j + 1;
if ( solve ( hash[j].hash1, j + 1 ) )
{
if ( j == m - 1 )
puts ( "successful hashing" );
}
else
{
puts ( "rehash necessary" );
break;
}
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator