Cod sursa(job #428483)

Utilizator rusu_raduRusu Radu rusu_radu Data 29 martie 2010 12:09:17
Problema Loto Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <stdio.h>
#include <map>
#define Nmax 105
#define InFile "loto.in"
#define OutFile "loto.out"

using namespace std;

int n, S, T[Nmax];
map <int, char> viz;

void citire();
void determinare();

int main()
{
  citire();
  determinare();
  return 0;
}

void citire()
{
  int i;
  FILE *fin=fopen (InFile, "r");
  fscanf (fin, "%d %d\n", &n, &S);
  for (i=1; i<=n; i++)
    fscanf (fin, "%d ", &T[i]);
}

void determinare()
{
  FILE *fout=fopen (OutFile, "w");
  int i, sol=0, j=n+1, k=n+1, S1, S2, S1o=0, S2o=0;
  for (i=1; i<=n && j==n+1; i++)
    for (j=1; j<=n && k==n+1; j++)
      for (k=1; k<=n; k++)
      {
        viz[T[i]+T[j]+T[k]]=1;
        S1=T[i]+T[j]+T[k];
        if (viz[S-S1])
        {
          S2=S-S1;
          sol=1;
          break;
        }
      }
  /*for (i=1; i<=S; i++)
    if (viz[i] && viz[S-i])
    {
      S1=i;
      S2=S-i;
      break;
    }*/
  if (!sol)
    fprintf (fout, "-1");
  else
    for (i=1; i<=n && (S1o!=1||S2o!=1); i++)
      for (j=1; j<=n && (S1o!=1||S2o!=1); j++)
        for (k=1; k<=n && (S1o!=1||S2o!=1); k++)
        {
          if (T[i]+T[j]+T[k]==S1 && !S1o)
          {
            fprintf (fout, "%d %d %d ", T[i], T[j], T[k]);
            S1o=1;
          }
          if (T[i]+T[j]+T[k]==S2 && !S2o)
          {
            fprintf (fout, "%d %d %d ", T[i], T[j], T[k]);
            S2o=1;
          }
        }
  fprintf (fout, "\n");
  fclose (fout);
}