Cod sursa(job #1048691)

Utilizator tannous.marcTannous Marc tannous.marc Data 6 decembrie 2013 11:40:26
Problema A+B Scor 0
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.52 kb
#include <fstream>
#include <algorithm>

using namespace std;
    ifstream in("triang.in");
    ofstream out("triang.out");
struct shp{
    int a,b;
    inline bool operator < (const shp &dr) const
    {
            if(min(a,b)==min(dr.a,dr.b))
                return max(a,b)<max(dr.a,dr.b);
            else return min(a,b)<min(dr.a,dr.b);
    }
    shp(int x,int y)
    {
        a=x;
        b=y;
    }
    shp()
    {
        a=b=0;
    }
};
inline bool inter(const shp &x,const shp &y)
    {
        if(y.a>x.a && y.a<x.b && !(y.b>=x.a && y.b<=x.b)) return 1;
        if(y.b>x.a && y.b<x.b && !(y.a>=x.a && y.a<=x.b)) return 1;
        return 0;
    }
int lan[12],n;
shp v[59000];
int valid(int k){
    int ok=1;
    for(int i=1;i<k;i++)
    {
        ok=!inter(v[i],v[k]) && v[i]<v[i+1];
    }
    return ok;
}
void afisare(){
    for(int i=1;i<=n-3;i++) out<<v[i].a<<" "<<v[i].b<<"  ";
    out<<endl;
}
void back(int k){
    for(int i=1;i<=n-2;i++){
        for(int j=i+2;j<=n && !(i==1 && j==n);j++){
            v[k].a=i;
            v[k].b=j;
            if(valid(k)==1){
                if (k == n-3) afisare();
                else back(k+1);
            }
        }
    }
}
int main()
{
    lan[0]=1;
    lan[1]=1;
    lan[2]=2;
    lan[3]=5;
    lan[4]=14;
    lan[5]=42;
    lan[6]=132;
    lan[7]=429;
    lan[8]=1430;
    lan[9]=4862;
    lan[10]=16796;
    lan[11]=58786;
    lan[12]=208012;
    in>>n;
    out<<lan[n-2]<<endl;
    back(1);
    return 0;
}