Pagini recente »
Monitorul de evaluare
|
Diferențe pentru runda/adunare între reviziile 46 și 20
|
Diferențe pentru runda/adunare între reviziile 46 și 27
|
Diferențe pentru utilizator/tzepu între reviziile 81 și 82
|
Cod sursă (job #403484)
Cod sursă (job
#403484)
#include <fstream>
#include <algorithm>
#define x first
#define y second
using namespace std;
ifstream f("immortal.in");
ofstream g("immortal.out");
int_fast32_t n,m,rasp,t,l1[16],c1[16],c2[16],l2[16],r,v2[21][21],d1[5]={0,-1,0,1,0},d2[5]={0,0,1,0,-1};
pair<int_fast32_t,int_fast32_t>v[16];
void bkt(int_fast32_t nr)
{
if(nr==1)
{
for(int_fast32_t i=1; i<t; i++)
{
g<<l1[i]<<" "<<c1[i]<<" "<<l2[i]<<" "<<c2[i]<<'\n';
}
r=1;
return;
}
if(r==1)
{
return;
}
for(int_fast32_t i=1; i<=t; i++)
{
if(v2[v[i].x][v[i].y]==1)
{
for(int_fast32_t j=1; j<=4; j++)
{
int_fast32_t l=v[i].x;
int_fast32_t c=v[i].y;
if(l+2*d1[j]<=n && l+2*d1[j]>=1 && c+2*d2[j]<=m && c+2*d2[j]>=1 && v2[l+d1[j]][c+d2[j]]==1 && v2[l+2*d1[j]][c+2*d2[j]]==0)
{
rasp++;
l1[rasp]=l;
c1[rasp]=c;
l2[rasp]=l+2*d1[j];
c2[rasp]=c+2*d2[j];
v2[l+d1[j]][c+d2[j]]=0;
v2[l+2*d1[j]][c+2*d2[j]]=1;
v2[l][c]=0;
v[i].x+=2*d1[j];
v[i].y+=2*d2[j];
bkt(nr-1);
if(r==1)
{
return;
}
rasp--;
v2[l+d1[j]][c+d2[j]]=1;
v2[l+2*d1[j]][c+2*d2[j]]=0;
v2[l][c]=1;
v[i].x=l;
v[i].y=c;
}
}
}
}
}
int main()
{
f>>n>>m>>t;
for(int_fast32_t i=1; i<=t; i++)
{
f>>v[i].x>>v[i].y;
v2[v[i].x][v[i].y]=1;
}
//sort(v+1,v+t+1);
bkt(t);
return 0;
}