Cod sursa(job #2508676)

Utilizator ililogIlinca ililog Data 12 decembrie 2019 18:20:41
Problema Farfurii Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
using namespace std;
#include<iostream>
#include<fstream>

int n, k;
int v[100001];

struct suma{
    long long sum;
    int sg;
} s;

suma sumaGaussmax(int k) {
    suma s = {0,1};

    while (s.sum+s.sg<k) {
        s.sum += s.sg;
        s.sg++;
    }

    s.sum+=s.sg;

    return s;
}

int main() {

    ifstream fin("farfurii.in");
    ofstream fout("farfurii.out");

    fin >> n >> k;

    for (int i = 1; i<=n; i++) {
        v[i] = i;
    }

    if (k == 0) {
        for (int i = 1; i<=n; i++) {
            fout << v[i] << " ";
        }
        return 0;
    }


    s = sumaGaussmax(k);
   // cout << s.sum << " " << s.sg << endl;

    for (int i = n-s.sg; i<=n-s.sg+s.sg/2; i++) {
        swap(v[i], v[(n+n-s.sg)-i]);
    }

  //  for (int i = 1; i<=n; i++) {
  //      cout << v[i] << " ";
   // }

    int diff = s.sum-k;

    //cout << endl << diff;

    if (diff == 0) {
        for (int i = 1; i<=n; i++) {
            fout << v[i] << " ";
        }
        return 0;
    }

    int poz = n-s.sg+diff;

   // cout << endl << poz;

    for (int i = 1; i<=n-s.sg-1; i++) {
        fout << v[i] << " ";
    }

    fout << v[poz] << " ";

    for (int i = n-s.sg; i<poz; i++) {
        fout << v[i] << " ";
    }

    for (int i = poz+1; i<=n; i++) {
        fout << v[i] << " ";
    }




    fin.close();
    fout.close();

    return 0;
}