Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define N 51
- using namespace std;
- ifstream fin("cuvinte.in");
- ofstream fout("cuvinte.out");
- char c[N][N], st[N][N];
- int a[N],f[N][N],use[N],n,m,cuv;
- void Citire()
- {
- fin>>cuv>>n>>m;
- for(int i=1; i<=cuv; i++)
- fin>>c[i];
- }
- ///
- bool potpune(int k, int i, int j, int d)
- {
- if(d==1)///linie
- {
- int lg=strlen(c[k]);
- if(j+lg>m+1) return 0;
- for(int jj=0; c[k][jj]; jj++)
- if(c[k][jj]!=st[i][jj+j] && st[i][jj+j]!=0)
- return 0;
- }
- else///coloana
- {
- int lg=strlen(c[k]);
- if(i+lg>n+1)return 0;
- for(int ii=0; c[k][ii]; ii++)
- if(c[k][ii]!=st[ii+i][j] &&st[ii+i][j]!=0)
- return 0;
- }
- return 1;
- }
- void pune(int k, int i, int j, int d)
- {
- if(d==1)
- {
- for(int jj=0; c[k][jj]; jj++)
- st[i][jj+j]=c[k][jj], f[i][jj+j]++;
- }
- else
- {
- for(int ii=0; c[k][ii]; ii++)
- st[ii+i][j]=c[k][ii], f[ii+i][j]++;
- }
- }
- void scoate(int k, int i, int j, int d)
- {
- if(d==1)
- {
- for(int jj=0; c[k][jj]; jj++)
- if(f[i][jj+j]==1)
- st[i][jj+j]=0,f[i][jj+j]--;
- else f[i][jj+j]--;
- }
- else
- {
- for(int ii=0; c[k][ii]; ii++)
- if(f[i+ii][j]==1)
- st[ii+i][j]=0,f[ii+i][j]--;
- else f[ii+i][j]--;
- }
- }
- void afis()
- {
- for(int i=1; i<=n; i++)
- {
- for(int j=1; j<=m; j++)
- if(st[i][j]==0)fout<<"- ";
- else fout<<st[i][j]<<" ";
- fout<<'\n';
- }
- }
- void Back(int k)
- {
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- for(int d=1; d<=2; d++)
- if(potpune(k,i,j,d))
- {
- pune(k,i,j,d);
- if(k==cuv)
- {
- afis();
- exit(0);
- }
- else Back(k+1);
- scoate(k,i,j,d);
- }
- }
- int main()
- {
- Citire();
- Back(1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment