Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- #include <map>
- #include <algorithm>
- #include <string>
- using namespace std;
- ifstream fin("catchy.in");
- ofstream fout("catchy.out");
- #define NMAX 100000
- int banner[NMAX],poz;
- int n,m,maxx,minn,ind,fr[NMAX],k;
- char cuv[NMAX][30];
- char sir[NMAX],sep[]=" ,:;)(.?!><}{",*p;
- char mat[NMAX][30];
- int nrcuv;
- int cauta(char cuv[],int k,char mat[NMAX][30])
- {
- for(int i=1; i<=k; i++)
- if(strcmp(mat[i],cuv)==0)
- return i;
- return 0;
- }
- int binar(char a[])
- {
- int st=1,dr=nrcuv,mij;
- while(st<=dr)
- {
- mij=(st+dr)/2;
- if(strcmp(cuv[mij],a)==0)
- return mij;
- if(strcmp(cuv[mij],a)>0)
- dr=mij-1;
- else st=mij+1;
- }
- return 0;
- }
- int main()
- {
- fin>>n;
- fin.get();
- for(int i=1; i<=n; i++)
- {
- fin.getline(sir,NMAX);
- p=strtok(sir,sep);
- while(p)
- {
- poz=cauta(p,nrcuv,cuv);
- if(poz==0)
- {
- nrcuv++;
- strcpy(cuv[nrcuv],p);
- banner[nrcuv]=1;
- }
- else
- banner[poz]++;
- p=strtok(NULL,sep);
- }
- }
- for(int i=1; i<nrcuv; i++)
- for(int j=i+1; j<=nrcuv; j++)
- if(strcmp(cuv[i],cuv[j])>0)
- {
- swap(cuv[i],cuv[j]);
- swap(banner[i],banner[j]);
- }
- fin>>m;
- fin.get();
- for(int i=1; i<=m; i++)
- {
- fin.getline(sir,NMAX);
- k=0;
- p=strtok(sir,sep);
- while(p)
- {
- int poz=cauta(p,k,mat);
- if(poz==0)
- {
- k++;
- strcpy(mat[k],p);
- fr[k]=1;
- }
- else
- fr[poz]++;
- p=strtok(NULL,sep);
- }
- bool ok=1;
- minn=999999999;
- for(int j=1; j<=k; j++)
- {
- poz=binar(mat[j]);
- if(poz==0 || banner[poz]<fr[j])
- {
- ok=0;
- break;
- }
- minn=min(minn,banner[poz]/fr[j]);
- }
- if(ok==1)
- {
- if(minn>maxx)
- {
- ind=i;
- maxx=minn;
- }
- }
- }
- fout<<ind<<endl<<maxx;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement