Cod sursa(job #2068097)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 17 noiembrie 2017 10:31:03
Problema Farfurii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <fstream>
#include <cstdio>
using namespace std;
ifstream fin("farfurii.in");

FILE *fout;
int out_loc;char out_buff[50005];

void write_init(const char*name)
{
    fout=fopen(name,"w");
    out_loc=0;
}

void write_ch(char ch)
{
    if(out_loc==50000)
    {
        fwrite(out_buff,1,50000,fout);
        out_loc=0;
        out_buff[out_loc++]=ch;
    }
    else
    {
        out_buff[out_loc++]=ch;
    }
}

void write_nr(int nr)
{
    if(nr<=9)
    {
        write_ch(nr+'0');
    }
    else
    {
        write_nr(nr/10);
        write_ch(nr%10+'0');
    }
}

void write_appendix()
{
    fwrite(out_buff,1,out_loc,fout);
}

int v[100002];



int main()
{
    write_init("farfurii.out");
    int n,m,s=0;
    fin>>n>>m;
    int k=1;
    while(s<m)
    {
        s+=k;
        k++;
    }
    int ramas=s-m-k+1;
    if(ramas<0)
        ramas*=-1;
    if(ramas)
    {
        int co=0;
        for(int i=1;i<=n-k+1;i++)
        {
            v[++co]=i;
        }
        for(int i=n;i>n-k+1;i--)
        {
            v[++co]=i;
        }
        int k1=n-ramas+1;
        k=n-k+1;
        int aux=v[k];
        v[k]=v[k1];
        v[k1]=aux;
        for(int i=1;i<k1;i++)
        {
            write_nr(v[i]);
            write_ch(' ');
        }
        for(int i=k1+1;i<=n;i++)
        {
            write_nr(v[i]);
            write_ch(' ');
        }
        write_nr(v[k1]);
        write_appendix();
    }
    else
    {
        for(int i=1;i<=n-k;i++)
        {
            write_nr(i);
            write_ch(' ');
        }
        for(int i=n;i>=n-k+1;i--)
        {
            write_nr(i);
            write_ch(' ');
        }
        write_appendix();
    }
    return 0;
}