Moderator: Board moderators
ferrizzi wrote:What about of the following input:
1
3 6 1
......
......
......
3 3
...
...
...
What would be the output? Yes or No?
I intended to make a similar remark about empty pieces. Because empty pieces have no edges, I was going to say that it was stupid to consider their existence. But... I solved the problem, and there are empty pieces in the input(which is stupid in an insulting way).The pieces of this puzzle has horizontal or vertical edges
int main(){
int cases,caseno;
int p;
cases=read_number();
for(caseno=1;caseno<=cases;caseno++){
read_board();
for(p=1;p<=pieces;p++){
read_piece();
if(emptypiece) printf("Yes\n");
else if(emptyboard) printf("No\n");
else if(piece_fits_board()) printf("Yes\n");
else printf("No\n");
}
printf("\n");
}
return 0;
}

5
2 2 1
.*
*.
5 5
.....
.....
...*.
.....
.....
4 4 6
.*..
.**.
..*.
..*.
4 4
.*..
.**.
..*.
..*.
4 4
....
**..
.*..
....
3 3
*..
*..
*..
2 2
*.
**
4 4
.*..
.**.
..*.
.**.
4 4
....
.**.
.**.
....
4 4 1
.*..
.***
.***
****
3 3
**.
***
***
3 3 1
...
...
...
2 2
..
*.
3 3 1
...
.*.
...
2 2
..
..
Yes
Yes
Yes
Yes
Yes
No
No
Yes
No
Yes
1
5 5 1
*****
*...*
*.*.*
*...*
*****
5 5
*****
*...*
*.*.*
*...*
*****

Cut after AC.1
3 3 1
**.
**.
**.
3 3
.**
***
...1
4 4 1
.**.
****
****
.**.
4 6
*.**.*
**..**
**..**
*.**.*
#include<stdio.h>
#define MAX 101
int main()
{
int max_m,max_n,m,n,s;
int t,i,j,k,p,q;
char first=1,valid,trim;
char board[MAX][MAX],puzzle[MAX][MAX];
scanf("%d",&t);
while(t--)
{
scanf("%d %d %d",&max_m,&max_n,&s);
for(i=0;i<max_m;i++)
scanf("%s",board[i]);
(first)?first=0:printf("\n");
for(i=0;i<s;i++)
{
scanf("%d %d",&m,&n);
for(j=0;j<m;j++)
scanf("%s",puzzle[j]);
/* trim up */
for(j=0;j<m;j++)
{
for(trim=1,k=0;k<n;k++)
if(puzzle[j][k]=='*') { trim=0; j=m; break; }
if(trim)
{
for(p=0;p<m-1;p++)
for(q=0;q<n;q++)
puzzle[p][q]=puzzle[p+1][q];
j--; m--;
}
}
/* trim down */
for(j=m-1;j>=0;j--)
{
for(trim=1,k=0;k<n;k++)
if(puzzle[j][k]=='*') { trim=0; j=-1; break; }
if(trim) m--;
}
/* trim left */
for(k=0;k<n;k++)
{
for(trim=1,j=0;j<m;j++)
if(puzzle[j][k]=='*') { trim=0; k=n; break; }
if(trim)
{
for(q=0;q<n-1;q++)
for(p=0;p<m;p++)
puzzle[p][q]=puzzle[p][q+1];
k--; n--;
}
}
/* trim right */
for(k=n-1;k>=0;k--)
{
for(trim=1,j=0;j<m;j++)
if(puzzle[j][k]=='*') { trim=0; k=-1; break; }
if(trim) n--;
}
/* puzzle fits board? */
if(m>=max_m&&n>=max_n)
{
for(valid=1,j=0;j<max_m;j++)
for(k=0;k<max_n;k++)
if(puzzle[j][k]=='*'&&board[j][k]!='*')
valid=0;
if(valid) goto zap;
}
else if(m>=max_m)
{
for(k=0;k<=max_n-n;k++)
{
for(valid=1,q=0;q<n;q++)
for(j=0;j<max_m;j++)
if(puzzle[j][q]=='*'&&board[j][k+q]!='*')
valid=0;
if(valid) goto zap;
}
}
else if(n>=max_n)
{
for(j=0;j<=max_m-m;j++)
{
for(valid=1,p=0;p<m;p++)
for(k=0;k<max_n;k++)
if(puzzle[p][k]=='*'&&board[j+p][k]!='*')
valid=0;
if(valid) goto zap;
}
}
else
{
for(j=0;j<=max_m-m;j++)
for(k=0;k<=max_n-n;k++)
{
for(valid=1,p=0;p<m;p++)
for(q=0;q<n;q++)
if(puzzle[p][q]=='*'&&board[j+p][k+q]!='*')
valid=0;
if(valid) goto zap;
}
}
zap: printf(valid ? "Yes\n" : "No\n");
}
}
return 0;
}
3 3 1
**.
*.*
.**
5 5
**...
*....
.....
....*
...**
arif_pasha wrote:What would be the output for this kind of test case?
- Code: Select all
3 3 1
**.
*.*
.**
5 5
**...
*....
.....
....*
...**
NoUsers browsing this forum: No registered users and 1 guest