Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <stdlib.h>
- #include <fstream>
- #include <algorithm>
- using namespace std;
- ifstream fin ("cuvinte.in");
- ofstream fout ("cuvinte.out");
- int n,i,j,l[1001],m,k,rd[1001];
- long long a1[101][101];
- char c[101][101],a[101][101];
- char vid[1001];
- int cmp (int l, int c, char *s, int d)
- {
- while(d)
- {
- if(*s!=a[l][c] && a[l][c]!=0)return 0;
- s++;c++;d--;
- }
- return 1;
- }
- int k1;
- int cmp1 (int i, int j, char *s, int d)
- {
- while(d)
- {
- if(a[i][j]!=*s && a[i][j]!=0)return 0;
- i++;s++;d--;
- }
- return 1;
- }
- int del (int i, int j, char *s, int d, int ind)
- {
- while(d)
- {
- if(a1[i][j])
- a1[i][j]-=(1<<(ind-1));
- if(!a1[i][j])
- a[i][j]=0;i++;d--;
- }
- }
- int add (int i, int j, char *s, int d, int ind)
- {
- while(d)
- {
- a1[i][j]+=(1<<(ind-1));
- a[i][j]=*s;
- s++;i++;d--;
- }
- }
- int add1 (int i, int j, char *s, int d, int ind)
- {
- while(d)
- {
- a1[i][j]+=(1<<(ind-1));
- a[i][j]=*s;s++;j++;d--;
- }
- }
- int del1 (int i, int j, char *s, int d, int ind)
- {
- while(d)
- {
- if(a1[i][j])
- a1[i][j]-=(1<<(ind-1));
- if(!a1[i][j])
- a[i][j]=0;j++;d--;
- }
- }
- int f1 (int k, int ct)
- {
- if(ct<=k1){
- int i,j;
- for(i=1;i<=n;i++)
- for(j=1;j<=m;j++)
- {
- if(j+l[k]-1<=m && cmp(i,j,c[k],l[k]))
- {
- add1(i,j,c[k],l[k],k);
- f1(rd[k+1],ct+1);
- del1(i,j,c[k],l[k],k);
- }
- if(i<=n-l[k]+1 && cmp1(i,j,c[k],l[k]))
- {
- add(i,j,c[k],l[k],k);
- f1(rd[k+1],ct+1);
- del(i,j,c[k],l[k],k);
- }
- }
- }
- else
- {
- for(i=1;i<=n;i++,fout<<"\n")
- for(j=1;j<=m;j++)
- {
- if(a[i][j])fout<<a[i][j]<<" ";
- else
- fout<<"- ";
- }
- // fout<<"\n";
- exit(0);
- }
- }
- int main()
- {
- fin>>k>>n>>m;
- k1=k;
- // memset(vid,0,43);
- for(i=1,fin.get();i<=k;i++)
- fin>>c[i],l[i]=strlen(c[i]),rd[i]=i;
- do{
- f1(rd[1],1);
- }while(next_permutation(rd+1,rd+1+k));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement