Cod sursa(job #7050)

Utilizator anoukAnca Dumitrache anouk Data 21 ianuarie 2007 12:08:59
Problema 1-sir Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 1.65 kb
#include <cstdio>
#include <iostream>
#define DIM 17000
#define MAX 257
using namespace std;

int n, s;
int par;
int a[DIM];
int p[DIM];
int lastline[DIM];
int k;
int lung;

void Read();
void Solve();
void Write();

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}

void Read()
{
     FILE *fin = fopen("1-sir.in", "r");
     fscanf(fin, "%d%d", &n, &s);
     if (n % 4 == 0 || (n-1) % 4 == 0) par = 1;
     fclose(fin);
}

void Solve()
{
     int aux = 2, no = 1;
     int saux[MAX];
     a[++k] = 1;
     lastline[1] = lastline[2] = 1;
     lung = n*(n-1)/4 - n/4 + 1;
     for (int i = 1; i <= lung; i++)
     {
         for (int j = 1; j <= aux; j++)
             a[++k] = lastline[j];
         no++;
         if (no == 2)
         {
            saux[0] = 0;
            for (int j = 1; j <= aux; j++)
            {
                saux[j] = lastline[j];
                lastline[j] = saux[j-1] + saux[j];
                lastline[j] %= 194767;
            }
            no = 0;
            lastline[++aux] = 1;
         }
         k--;
     }
     for (int i = lung; i > 0; i--)
         p[lung-i+1] = a[i];
         
}

void Write()
{
     FILE *fout = fopen("1-sir.out", "w");
     if (s < n/2)
        fprintf(fout, "0\n");
     if (par && s % 2)
        fprintf(fout, "0\n");
     else if (!par && !(s % 2))
        fprintf(fout, "0\n");
     else if (!par)
        fprintf(fout, "%d\n", p[s/2]);
     else
        fprintf(fout, "%d\n", p[s/2]);
  /*   for (int i = 1; i <= lung; i++)
         fprintf(fout, "%d ", p[i]);*/
 //    cout << par; cin.get();
     fclose(fout);
}