Cod sursa(job #760117)

Utilizator belginstirbuasdf asdf belginstirbu Data 20 iunie 2012 10:42:30
Problema Dame Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>

int main(void)
{
    unsigned int N;
    
    std::ifstream in("dame.in");
    in >> N;
    in.close();
    
    unsigned int *arr = new unsigned int [N];
    unsigned int index = 0;
    
    std::ofstream out("dame.out");
    
    if(N == 2)
    {
        printf("1\n1 1\n");
        out << 1 << '\n'<< 1 << ' ' << 1 << '\n';
        out.close();
        return 0;
    }

    if (N == 3)
    {
        printf("2\n1 1\n2 3\n");
        out << 2 << '\n' << 1 << ' ' << 1 << '\n' << 2 << ' ' << 3 << '\n';
        out.close();
        return 0;
    }
    
    if(N % 12 == 3 || N % 12 == 9)
    {
        for(unsigned int i = 4; i <= N; i += 2, ++index)
            arr[index] = i;
        arr[index++] = 2;
        
        for(unsigned int i = 5; i <= N; i+= 2, ++index)
            arr[index] = i;
        arr[index++] = 1;
        arr[index] = 3;
    }
    else
    {
        for(unsigned int i = 2; i <= N; i += 2, ++index)
            arr[index] = i;
        
        if(N % 12 == 8)
            for(unsigned int i = 1; i <= N; i += 4)
            {
                arr[index + 1] = i;
                arr[index] = i + 2;
                index += 2;
            }
        
        if(N % 12 == 2)
        {
            arr[index + 1] = 1;
            arr[index] = 3;
            index += 2;
            for(unsigned int i = 7; i <= N; i += 2, ++index)
                arr[index] = i;
            arr[index] = 5;
        }
    }
    
    out << N << '\n';
    for(unsigned int index = 0; index < N; ++index)
        out << index + 1 << ' ' << arr[index] << '\n';
    out.close();
    
    return 0;
}