Cod sursa(job #18394)

Utilizator DranaXumAlexandru Dumitru Paunoiu DranaXum Data 18 februarie 2007 11:55:34
Problema Tricouri Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 9-a si gimnaziu Marime 1.16 kb
#include<stdio.h>

long int v[5000001];

int main()
{
   FILE *fin,*fout;
   long int n,i,u=0,x,j,s,a[300001];
   int m,k,p;
   fin=fopen("tricouri.in","r");
   fout=fopen("tricouri.out","w");
   fscanf(fin,"%ld%d",&n,&m);
   for(i=1;i<=n;i++)
   {
      fscanf(fin,"%ld",&a[i]);
      x=a[i];
      v[x]=i;
      u+=a[i];
      for(j=1;j<=u;j++)
      {
         if((x!=j) && (v[j]!=0))
         {
            s=j+a[i];
            if(!v[s]) 
               v[s]=i;
            else
               if(a[i]>a[v[s]])
                  v[s]=i;
         }
      }
   }

   for(i=1;i<=m;i++)
   {
      fscanf(fin,"%d%d",&k,&p);
      int ok=0;
      for(j=u;j>=1;j--)
      {
         if(j%p==0){
            s=j;
            int ps=0;
            while((ps<=k) && (s!=0))
            {
               s-=a[v[s]];
               ps++;
               
            }
            if((ps==k) && (s==0))
            {
               fprintf(fout,"%d\n",j);
               ok=1;
               break;
            }
         }
      }
      if(!ok)
         fprintf(fout,"-1\n");
   }
   
   fclose(fin);
   fclose(fout);
   return 0;
}