Pagini recente » Cod sursa (job #109839) | Cod sursa (job #511780) | Cod sursa (job #1974427) | Cod sursa (job #808526) | Cod sursa (job #1822110)
#include <stdio.h>
#define LIM 1<<17
char BUF2[LIM];
FILE *fo;
int poz2=0;
inline long long sqrt(int x){
int i;
for(i=1;1LL*i*i<=x;i++);
return i-1;
}
inline void putch(char ch){
BUF2[poz2++]=ch;
if(poz2==LIM){
fwrite(BUF2,LIM,1,fo);
poz2=0;
}
}
inline void baga(int x){
char s[15];
int k=0;
if(x<0){
putch('0');
return;
}
do{
s[k++]=x%10+'0';
x/=10;
}while(x);
while(k>0){
k--;
putch(s[k]);
}
}
int main()
{
long long n, k, nr, x, i;
FILE *fi=fopen("farfurii.in", "r");
fo=fopen("farfurii.out", "w");
fscanf(fi, "%d%lld", &n, &k);
fclose(fi);
//pentru ca config sa fie min lexicografica tre sa impingem farfuriile aflate descrescator cat de mult spre dreapta
//astfel va aparea la final o secv descrescatoare de x elemente
x=(sqrt(1+8*k)+1)/2;//functia de gradul 2
//la final cel mai probabil nu E x natural a.i. x*(x-1)/2==k => tre sa alegem un nr sa stea in fata acestei secvente ca sa produca k in total
x--;
for(i=1;i<x;i++){
baga(i);
putch(' ');
}
x++;
k=k-x*(x-1)/2;
nr=k+x-1;
baga(nr);
putch(' ');
x--;
for(i=n;i>=x;i--)
if(i!=nr){
baga(i);
putch(' ');
}
if(poz2>0)
fwrite(BUF2,poz2,1,fo);
fclose(fo);
return 0;
}