Cod sursa(job #520678)

Utilizator anushaAna Catalina anusha Data 9 ianuarie 2011 23:11:22
Problema Numere 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
char v[1050000];
int main(){
	long i,n,m,l,p,pt[21],k,max=0,nr;
	char s[21],x[21],ch,c[2];
	ifstream f("dinti.in");
	ofstream g("dinti.out");
	f>>n;f>>m;f>>l;
	p=1;
	for(i=l-1;i>=0;i--)
		{pt[i]=p;p=p*2;}
	f.get();
	f.get(s,l+1);nr=0;
	for (int j=0;j<l;j++)
			nr=nr+(s[j]-'0'?0:1)*pt[j];
	for(i=0;i<n-l;i++)
		{	
			v[nr]=1;
			for(k=1;k<=l;k++)
			if(i&(1<<k))v[nr^(1<<k)]=1;
			if(nr>max)max=nr;
			f>>ch;
			nr=nr%pt[0];
			long t=(ch-'0')?0:1;
			nr=nr*2+t;
		}
		v[nr]=1;if(nr>max)max=nr;
		
	
	/*for(i=max;i>=0;i--)	
		if(v[i]){
		for(k=1;k<=l;k++)
			if(i&(1<<k))v[i^(1<<k)]=1;
		}
	for(i=0;i<1000;i++)	
		if(v[i]){
	cout<<i<<endl;}
		cout<<endl;*/
		f.get();
	for(i=0;i<m;i++){
		//f.getline(s,20);
		long nr=0;p=1;
		/*for (int j=0;j<l;j++)
			nr=nr+(s[j]-'0')*pt[j];
		*/
		f>>x;
		for(int j=l-1;j>=0;j--)
		nr+=(x[j]-'0')*pt[j];
		if(v[nr])g<<1<<endl;
		else g<<0<<endl;
	}
	f.close();g.close();
		return 0;
		
}