Pagini recente »
Clasament 2024-04-07-clasa-8-tema-24
|
2021-11-17-clasa-6-tema-08
|
Cod sursă (job #700121)
|
Istoria paginii runda/002
|
Cod sursă (job #763436)
Cod sursă (job
#763436)
#include <fstream>
using namespace std;
ifstream cin ( "immortal.in" ) ;
ofstream cout ( "immortal.out" ) ;
int directions ( int i , int j , int mat [ ] [ ] , int killqueue , int afis , int h ) {
if ( mat [ i + 1 ] [ j ] > 0 && mat [ i + 2 ] [ j ] == 0 )
{
afis [ h ] [ 1 ] = i ;
afis [ h ] [ 2 ] = j ;
afis [ h ] [ 3 ] = i + 2 ;
afis [ h ] [ 4 ] = j ;
killqueue [ 1 ] = i ;
killqueue [ 2 ] = j ;
killqueue [ 3 ] = mat [ i ] [ j ] ;
killqueue [ 4 ] = 1 ;
killqueue [ 5 ] = 3 ;
backtrack ( mat , alive , killqueue , afis , imm , h + 1 ) ;
}
if ( mat [ i - 1 ] [ j ] > 0 && mat [ i - 2 ] [ j ] == 0 )
{
afis [ h ] [ 1 ] = i ;
afis [ h ] [ 2 ] = j ;
afis [ h ] [ 3 ] = i - 2 ;
afis [ h ] [ 4 ] = j ;
killqueue [ 1 ] = i ;
killqueue [ 2 ] = j ;
killqueue [ 3 ] = mat [ i ] [ j ] ;
killqueue [ 4 ] = 2 ;
killqueue [ 5 ] = 3 ;
backtrack ( mat , alive , killqueue , afis , imm , h + 1 ) ;
}
if ( mat [ i ] [ j + 1 ] > 0 && mat [ i ] [ j + 2 ] == 0 )
{
afis [ h ] [ 1 ] = i ;
afis [ h ] [ 2 ] = j ;
afis [ h ] [ 3 ] = i ;
afis [ h ] [ 4 ] = j + 2 ;
killqueue [ 1 ] = i ;
killqueue [ 2 ] = j ;
killqueue [ 3 ] = mat [ i ] [ j ] ;
killqueue [ 4 ] = 3 ;
killqueue [ 5 ] = 3 ;
backtrack ( mat , alive , killqueue , afis , imm , h + 1 ) ;
}
if ( mat [ i ] [ j - 1 ] > 0 && mat [ i ] [ j - 2 ] == 0 )
{
afis [ h ] [ 1 ] = i ;
afis [ h ] [ 2 ] = j ;
afis [ h ] [ 3 ] = i ;
afis [ h ] [ 4 ] = j - 2 ;
killqueue [ 1 ] = i ;
killqueue [ 2 ] = j ;
killqueue [ 3 ] = mat [ i ] [ j ] ;
killqueue [ 4 ] = 4 ;
killqueue [ 5 ] = 3 ;
backtrack ( mat , alive , killqueue , afis , imm , h + 1 ) ;
}
}
// mat i , j ; alive i ; direction ; cond ;
int backtrack ( int mat [ ] [ ] , int alive [ ] , int killqueue [ ] , int imm , int h ) {
int i , j , ok = 0 ;
if ( killqueue [ 5 ] != 0 ) {
alive [ killqueue [ 3 ] ] = -1 ;
if ( killqueue [ 4 ] == 1 ) {
mat [ killqueue [ 1 ] + 2 ] [ killqueue [ 2 ] ] = mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] ;
mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] = 0 ;
}
if ( killqueue [ 4 ] == 2 ) {
mat [ killqueue [ 1 ] - 2 ] [ killqueue [ 2 ] ] = mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] ;
mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] = 0 ;
}
if ( killqueue [ 4 ] == 1 ) {
mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] + 2 ] = mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] ;
mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] = 0 ;
}
if ( killqueue [ 4 ] == 1 ) {
mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] - 2 ] = mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] ;
mat [ killqueue [ 1 ] ] [ killqueue [ 2 ] = 0 ;
}
killqueue [ 1 ] = 0 ;
killqueue [ 2 ] = 0 ;
killqueue [ 3 ] = 0 ;
killqueue [ 4 ] = 0 ;
killqueue [ 5 ] = 0 ;
}
for ( i = 0 ; i < n ; i ++ ) {
if ( alive [ i ] != -1 ){
for ( j = 0 ; j < n ; j ++ ) {
if ( i != j && alive [ j ] != -1 ) {
directions ( i , j , mat , killqueue ) ;
ok = 1 ;
}
}
}
}
if ( ok == 0 )
{
for ( i = 0 ; i < h ; i ++ ) {
cout << afis [ i ] [ 1 ] << " " << afis [ i ] [ 2 ] << " " << afis [ i ] [ 3 ] << " " << afis [ i ] [ 4 ] << "\n" ;
}
return 0 ;
}
}
int main()
{
int alive [ 401 ] ;
int mat [ 23 ] [ 23 ] = {} ;
int killqueue [ 6 ] = {} ;
int afis [ 401 ] [ 5 ] ;
int lin , col , imm ;
int i , j , x , y ;
cin >> lin >> col >> imm ;
for ( i = 0 ; i < lin ; i ++ )
for ( j = 0 ; j < col ; j ++ ) {
mat [ i ] [ j ] = -1 ;
}
for ( i = 0 ; i < imm ; i ++ )
{
cin >> x >> y ;
mat [ x ] [ y ] = i + 1 ;
alive [ i ] = i + 1 ;
}
killqueue [ 5 ] = 2395 ;
backtrack ( mat [ ] [ ] , alive [ ] , killqueue [ ] , afis [ ] [ ] , imm , 0 ) ;
return 0;
}