对于双方有意义的信息分别为日和月 当且仅当其入度为一存在时 才能继续进行游戏 否则必然无法判断出谁能获胜 另外要注意的是可能是生日不在表中的情况 以及
对重复日期的处理 具体参加wiskey大牛的解题报告 以下是实现代码
#include
<
iostream
>
using namespace std;
bool hash[ 20 ][ 40 ];
long m_in[ 20 ];
long d_in[ 40 ];
int main()
{
long T;
scanf( " %ld " , & T);
while (T -- )
{
memset(hash, 0 , sizeof (hash));
memset(m_in, 0 , sizeof (m_in));
memset(d_in, 0 , sizeof (d_in));
long N,M,D,i,j;
scanf( " %ld%ld%ld " , & N, & M, & D);
while (N -- )
{
long mon,day;
scanf( " %ld%ld " , & mon, & day);
if ( ! hash[mon][day])
{
hash[mon][day] = true ;
++ m_in[mon];
++ d_in[day];
}
}
if ( ! hash[M][D])
{
l1:
puts( " No " );
continue ;
}
bool win = false ;
while ( 1 )
{
bool finish = false ;
if (m_in[M] == 1 )
{
win = true ;
break ;
}
for (i = 1 ;i <= 12 ; ++ i)
{
if (m_in[i] == 1 )
{
finish = true ;
for (j = 1 ;j <= 31 ; ++ j)
{
if (hash[i][j])
{
-- d_in[j];
-- m_in[i];
hash[i][j] = false ;
break ;
}
}
}
}
if (d_in[D] == 1 )
{
break ;
}
for (i = 1 ;i <= 31 ; ++ i)
{
if (d_in[i] == 1 )
{
finish = true ;
for (j = 1 ;j <= 12 ; ++ j)
{
if (hash[j][i])
{
-- d_in[i];
-- m_in[j];
hash[j][i] = false ;
break ;
}
}
}
}
if ( ! finish)
{
goto l1;
}
}
if (win)
{
puts( " Wiskey Win " );
}
else
{
puts( " Michelle Win " );
}
}
return 0 ;
}
using namespace std;
bool hash[ 20 ][ 40 ];
long m_in[ 20 ];
long d_in[ 40 ];
int main()
{
long T;
scanf( " %ld " , & T);
while (T -- )
{
memset(hash, 0 , sizeof (hash));
memset(m_in, 0 , sizeof (m_in));
memset(d_in, 0 , sizeof (d_in));
long N,M,D,i,j;
scanf( " %ld%ld%ld " , & N, & M, & D);
while (N -- )
{
long mon,day;
scanf( " %ld%ld " , & mon, & day);
if ( ! hash[mon][day])
{
hash[mon][day] = true ;
++ m_in[mon];
++ d_in[day];
}
}
if ( ! hash[M][D])
{
l1:
puts( " No " );
continue ;
}
bool win = false ;
while ( 1 )
{
bool finish = false ;
if (m_in[M] == 1 )
{
win = true ;
break ;
}
for (i = 1 ;i <= 12 ; ++ i)
{
if (m_in[i] == 1 )
{
finish = true ;
for (j = 1 ;j <= 31 ; ++ j)
{
if (hash[i][j])
{
-- d_in[j];
-- m_in[i];
hash[i][j] = false ;
break ;
}
}
}
}
if (d_in[D] == 1 )
{
break ;
}
for (i = 1 ;i <= 31 ; ++ i)
{
if (d_in[i] == 1 )
{
finish = true ;
for (j = 1 ;j <= 12 ; ++ j)
{
if (hash[j][i])
{
-- d_in[i];
-- m_in[j];
hash[j][i] = false ;
break ;
}
}
}
}
if ( ! finish)
{
goto l1;
}
}
if (win)
{
puts( " Wiskey Win " );
}
else
{
puts( " Michelle Win " );
}
}
return 0 ;
}