Beispiel #1
0
void try_to_add_or_delete(cl_term* Sp, cl_term* S)
{
   string Sp_str = Sp->conv2str();
   string S_str  = S->conv2str();
   Sp_nchecker.insert(Sp_str);
   S_nchecker.insert(S_str);
   if (Sp_nchecker.count(Sp_str) >= max_SS_n || S_nchecker.count(S_str) >= max_SS_n)
     {
	multiset_delete_one(Sp_nchecker, Sp_str);
	multiset_delete_one(S_nchecker,  S_str);
	delete Sp;
	delete S;
	return;
     }
   if (uniqchecker.try_to_add(Sp_str, S_str))
     {
	population.push_back(make_cl_ssprimega_member(Sp, S));
     }
   else
     {
	multiset_delete_one(Sp_nchecker, Sp_str);
	multiset_delete_one(S_nchecker,  S_str);
	delete Sp;
	delete S;
	return;
     }
}
Beispiel #2
0
int main()
{
    int N; scanf("%d", &N);
    for(int i=0; i<N; ++i) {
        scanf("%llu", a+i); 
        st.insert(a[i]);
    }
    if (N>200) { puts("Yes"); }
    else {
        uint64 v[4];
        for(int i1=0; i1<N; ++i1)
        for(int i2=i1+1; i2<N; ++i2)
        for(int i3=i2+1; i3<N; ++i3)
        {
            v[0]=a[i1]; v[1]=a[i2]; v[2]=a[i3];
            v[3]=v[0]^v[1]^v[2];
            multiset<uint64> st2;
            for(int x=0; x<4; ++x) { 
                st2.insert(v[x]);
            }
            bool good=true;
            for(int x=0; x<4; ++x) {
                if (st.count(v[x]) < st2.count(v[x]))
                    good=false;
            }
            if (good) { puts("Yes"); return 0; }
        }
        puts("No");
    }
}
Beispiel #3
0
//devuelve cuantos elementos de 'mi_multiset' tienen un valor de 'valor'
int contarElementosMultiset(multiset<int> mi_multiset,int valor)
{ //Creo una variable donde guardare los valores de multiset, con la funcion "count" de multiset cuento a ver cuantos valores tiene el multiset y retorno la variable para saber cuantos veces se hayaron los valores
        int conta=1;//por warning los inicialize
        if(conta != 0) //si el contador es distinto a cero
        {
             conta = mi_multiset.count(valor); //contador va a contar los valores que haigan con la funcion count
        }
        return conta;
        //Me guie de aqui: http://www.cplusplus.com/reference/set/multiset/count/
}
Beispiel #4
0
int main() 
{
	ios::sync_with_stdio(0);
	#ifndef ONLINE_JUDGE
		ifstream F("p.in");
	#endif
	F>>n;
	for (int i=1,v;i<=n;++i)
	{
		F>>v;
		if ( wrap.count(v) ) 
		// if we already have a wrap ( a b a ) , then we can update the solution
		// and clear the containers as two wraps won't overlaps and the wrap we made
		// is the leftmost
		{
			finish(wrap[v],v);
			continue;
		} 
		else
		{
			if ( ct.count(v) )
			{
				int cnt = ct.count(v) >= 2 ? 1 : 0; 
				// if a have at least 2 v's then we can also wrap one
				
				while ( cnt || stk.back() != v ) 
				{
					if ( stk.back() == v ) 
						cnt--;
					wrap[stk.back()] = v; // now just wrap
					stk.pop_back();
				} 
			} 
			ct.insert(v);
			stk.push_back(v);
		}
	}
	G<<ans.size()<<'\n';
	for (int i=0;i<int(ans.size());++i)
		G<<ans[i]<<' ';
	G<<'\n';
}
Beispiel #5
0
int main()
{
	int n;
	while((cin >> n) && n)
	{
		unsigned int from,to;
		c.clear();
		for(int i = 0;i < n;i++)
		{
			cin >> from >> to;
			couple temp(from,to);
			couple retemp(to,from);
			if(c.count(retemp) != 0)
				c.erase(c.find(retemp));
			else c.insert(temp);
		}
		if(c.size() == 0)
			cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}
Beispiel #6
0
//devuelve la suma de los elementos de 'mi_multiset' que usan 'llave' como llave
int sumaElementosMultiset(multiset<int> mi_multiset, int valor)
{
    multiset<int>::iterator it; //Creo un iterador
    it = mi_multiset.find(valor); //El iterador toma el valor del que le proporciona el find
    return *it * mi_multiset.count(valor); //El valor que proporciona el find lo multiplica por la cantidad de elementos de multiset
}
Beispiel #7
0
//devuelve cuantos elementos de 'mi_multiset' tienen un valor de 'valor'
int contarElementosMultiset(multiset<int> mi_multiset,int valor)
{
    return mi_multiset.count(valor); //count cuenta los valores del multiset
}
Beispiel #8
0
double median(char c,long long x){
	double retval;

	if(DEBUG){
		for(it = minset.begin();it!=minset.end();it++) cout<<*it<<" ";
		cout<<":";
		for(it = maxset.begin();it!=maxset.end();it++) cout<<*it<<" ";
		cout<<endl;
	}

	if(c == 'r'){

		if(minset.empty() && maxset.empty()){
            flag++;
            return -1;
        }

		else if(minset.empty()){

			if(maxset.count(x) == 0){
                flag++;
                return -1;
            }

			else{
				// TODO - Done
				it = maxset.find(x);
				if(it != maxset.end()) maxset.erase(it);
			}
		}

		else if(maxset.empty()){

			if(minset.count(x) == 0){
                flag++;
                return -1;
            }

			else{
				// TODO - Done
				it = minset.find(x);
				if(it != minset.end()) minset.erase(it);
			}
		}

		else if(minset.count(x) == 0 && maxset.count(x) == 0){
            flag++;
            return -1;
        }

		else{
			// TODO - Done
			if(minset.count(x) != 0){
				it = minset.find(x);
				if(it != minset.end()) minset.erase(it);
			}

			else{
				it = maxset.find(x);
				if(it != maxset.end()) maxset.erase(it);
			}
		}
		adjust();
	}

	else if(c == 'a'){
		it = maxset.begin();
		if(*it <= x) maxset.insert(x);
		else minset.insert(x);
		adjust();
	}

	if(minset.empty()){
            flag++;
            return -1;
    }

	else{// TODO

		if(minset.size() > maxset.size()){
			it = minset.end();
			it--;
			retval = *it;
		}

		else{
			it = minset.end();
			it--;
			retval = *it;
			it = maxset.begin();
			retval = (retval+(*it))/2;
		}
	}

	if(DEBUG){
		cout<<"Minset not empty"<<endl;

		for(it = minset.begin();it!=minset.end();it++) cout<<*it<<" ";
		cout<<":";

		for(it = maxset.begin();it!=maxset.end();it++) cout<<*it<<" ";
	}

	return retval;
}