分析:这是DFS又一个经典题目,符合DFS的理念一路搜到底,再回头。
主要难度在于递归边界的书写上。(这个题的类型非常重要)
主要难度在于递归边界的书写上。(这个题的类型非常重要)
代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std ;
int f= 0 ;
int dfs()
{
int a,b,c,d ;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a && b && c && d )
{
if( a * b != c * d ) { f= 0 ; return 0 ; }
else return a + c ;
}
else
{
if( !a ) a = dfs() ;
if( !c ) c = dfs() ;
if( a * b != c * d ) { f= 0 ; return 0 ; }
else return a + c ;
}
}
#include <cstring>
#include <cstdio>
using namespace std ;
int f= 0 ;
int dfs()
{
int a,b,c,d ;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a && b && c && d )
{
if( a * b != c * d ) { f= 0 ; return 0 ; }
else return a + c ;
}
else
{
if( !a ) a = dfs() ;
if( !c ) c = dfs() ;
if( a * b != c * d ) { f= 0 ; return 0 ; }
else return a + c ;
}
}
int main()
{
int t ;
scanf("%d",&t);
int k = 0 ;
while( t-- )
{
f= 1 ;
dfs() ;
if( k++ ) printf("\n"); ;
if( f ) printf("YES\n");
else printf("NO\n");
}
return 0 ;
}
{
int t ;
scanf("%d",&t);
int k = 0 ;
while( t-- )
{
f= 1 ;
dfs() ;
if( k++ ) printf("\n"); ;
if( f ) printf("YES\n");
else printf("NO\n");
}
return 0 ;
}