Cod sursa(job #2476201)
Utilizator | Cojocaru Andrei Cristian Cojocaru_Andrei_Cristian | Data | 18 octombrie 2019 12:25:27 |
---|---|---|---|
Problema | Potrivirea sirurilor | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 5.64 kb |
#include <fstream>
#include <cstring>
using namespace std;
char mat0[105][105];
int mat1[105][105],mat[105][105],r1[105],c1[105],d1[105],d2[1000005];
int main()
{
ifstream cin("1.in");
ofstream cout("1.out");
int t,n,q,a,b;
char ch;
cin>>t;
for(int u=1;u<=t;u++)
{
memset(mat,0,sizeof(mat));
memset(mat1,0,sizeof(mat1));
memset(r1,0,sizeof(r1));
memset(c1,0,sizeof(c1));
memset(d1,0,sizeof(d1));
memset(d2,0,sizeof(d2));
int s=0,cnt=0,s1=0;
cin>>n>>q;
for(int i=1;i<=q;i++)
{
cin>>ch;
cin>>a>>b;
mat0[a][b]=ch;
if(ch=='x')
{
s++;
r1[a]=1;
c1[b]=1;
mat1[a][b]=1;
}
else
{
if(ch=='+')
{
d1[a+b]=1;
if(a-b<0)
{
d2[1000005+a-b]=1;
}
else
d2[a-b]=1;
mat[a][b]=1;
s++;
}
else
{
s+=2;
r1[a]=1;
c1[b]=1;
if(a-b<0)
{
d2[1000005+a-b]=1;
}
else
d2[a-b]=1;
mat1[a][b]=mat[a][b]=1;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(r1[i]==0&&c1[j]==0)
{
r1[i]=1;
c1[j]=1;
mat1[i][j]=1;
}
if(i-j<0)
{
if(d1[i+j]==0&&d2[1000005+i-j]==0)
{
d1[i+j]=1;
d2[1000005+i-j]=1;
mat[i][j]=1;
}
}
else
{
if(d1[i+j]==0&&d2[i-j]==0)
{
d1[i+j]=1;
d2[i-j]=1;
mat[i][j]=1;
}
}
}
}
cout<<"Case #"<<u<<": ";
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mat0[i][j]=='x')
{
if(mat[i][j]==1)
{
s1++;
cnt++;
}
}
else
{
if(mat0[i][j]=='+')
{
if(mat1[i][j]==1)
{
s1++;
cnt++;
}
}
else
{
if(mat0[i][j]!='o')
{
if(mat[i][j]==1)
{
if(mat1[i][j]==1)
{
s1+=2;
cnt++;
}
else
{
s1++;
cnt++;
}
}
else
{
if(mat1[i][j]==1)
{
s1++;
cnt++;
}
}
}
}
}
}
}
cout<<s+s1<<" "<<cnt<<"\n";
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mat0[i][j]=='x')
{
if(mat[i][j]==1)
{
cout<<'o'<<" "<<i<<" "<<j<<"\n";
}
}
else
{
if(mat0[i][j]=='+')
{
if(mat1[i][j]==1)
{
cout<<'o'<<" "<<i<<" "<<j<<"\n";
}
}
else
{
if(mat0[i][j]!='o')
{
if(mat[i][j]==1)
{
if(mat1[i][j]==1)
{
cout<<'o'<<" "<<i<<" "<<j<<"\n";
}
else
{
cout<<'+'<<" "<<i<<" "<<j<<"\n";
}
}
else
{
if(mat1[i][j]==1)
{
cout<<'x'<<" "<<i<<" "<<j<<"\n";
}
}
}
}
}
}
}
}
return 0;
}