Cod sursa(job #70328)

Utilizator FlorianFlorian Marcu Florian Data 5 iulie 2007 15:55:31
Problema Farfurii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#include<values.h>
long n,k,m;
long cauta(long k)
        {
        long i,d=MAXLONG;
        for(i=1;i<=k;++i)
                {
                if(i*(i-1)/2==k) { m=i; break;}
                else if (i*(i-1)/2<k&&k-(i*(i-1)/2<d)) {d=k-(i*(i-1)/2);m=i;}
                }
         return m;
         }
int main()
        {
        FILE*f=fopen("farfurii.in","r");
        FILE*g=fopen("farfurii.out","w");
        fscanf(f,"%ld %ld",&n,&k);
        m=cauta(k);
        long i;
        if(k==m)
                {
                for(i=1;i<=n-m;++i) fprintf(g,"%ld ",i);
                for(i=n-1;i>=n-m+1;--i) fprintf(g,"%ld ",i);
                }
        else
                {
                for(i=1;i<=n-m-1;++i) fprintf(g,"%ld ",i);
                fprintf(g,"%ld ",n-((m+1)*m/2-k));
                for(i=n;i>=n-m;--i) if(i!=n-((m+1)*m/2-k))fprintf(g,"%ld ",i);
                }
        return 0;
        }