Cod sursa(job #1039765)

Utilizator Kira96Denis Mita Kira96 Data 23 noiembrie 2013 16:15:05
Problema Dtcsu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream>
#include<algorithm>
#include<cstring>
#define DIM 100000
#define C 276997
using namespace std;
ifstream f("dtcsu.in");
ofstream g("dtcsu.out");
char s[DIM];
long long nr,v[DIM];
int sol,st,dr,mij,t,nb,i,OK,n;
bool cb(long long x)
{
    while(x%11==0)
        x/=11;
    st=1; dr=t;
    if(x>v[dr])
        return 0;
    while(st<=dr)
    {
        mij=(st+dr)>>1;
        if(x==v[mij])
            return 1;
        if(x>v[mij])
            st=mij+1;
        else
            dr=mij-1;
    }
    return 0;
}
int main ()
{
    f.get(s,DIM,EOF);
	OK=1;
    while(s[0])
    {
        n=strlen(s);
        for(i=0;i<n;++i)
        {
            if(s[i]<='9'&&s[i]>='0')
            nr=nr*10+s[i]-'0';
            else
            {
				nb++;
				if(nr%11)
					v[++t]=nr;
				nr=0;
				if(nb>C)
				{
					if(v[t]==nr)
						t--;
					sort(v+1,v+t+1);
					OK=0;
					break;
				}
			}
		}
		if(!OK)
			break;
		f.get(s,DIM,EOF);
	}
	for(;i<n;++i)
	{
		if(s[i]>='0')
			nr=nr*10+s[i]-'0';
		else
		{
			sol+=cb(nr);
			nr=0;
		}
	}
	f.get(s,DIM,EOF);
	while(s[0])
	{
		n=strlen(s);
		for(i=0;i<n;++i)
		{
			if(s[i]>='0')
				nr=nr*10+s[i]-'0';
			else
			{
				sol+=cb(nr);
				nr=0;
			}
		}
		f.get(s,DIM,EOF);
	}
    g<<sol;
    return 0;
}