Pagini recente » Cod sursa (job #2227847) | Cod sursa (job #540375) | Cod sursa (job #44748) | Cod sursa (job #2843458) | Cod sursa (job #1734268)
#include<stdio.h>
#define MAREMASK 10000000
#define MAREPRINTFORMAT "%07d"
#define MAREARRAYSIZE 100
typedef struct mare{int a[MAREARRAYSIZE];int len;}mare;
#define newmare(m__) {int i__;for(i__=0;i__<MAREARRAYSIZE;i__++)(m__).a[i__]=0;(m__).len=0;}
#define mplusi(m__,i__,poz__) {long long j__=i__;int k__=poz__;if(j__){for(;k__<(m__).len||j__;k__++)j__+=(k__<(m__).len?(m__).a[k__]:0),(m__).a[k__]=j__%MAREMASK,j__/=MAREMASK;(m__).len=k__;}}
#define mtimesi(m__,tempm__,i__) {int j__=i__;int k__;long long tempi__=0;for(k__=0;k__<(m__).len||tempi__;k__++)tempi__+=(k__<(m__).len?(m__).a[k__]:0)*j__,(tempm__).a[k__]=tempi__%MAREMASK,tempi__/=MAREMASK;(tempm__).len=k__;}
#define mplusm(m1__,m2__) {int i__;long long tempi__=0;for(i__=0;i__<(m2__).len||tempi__;i__++)tempi__+=(i__<(m2__).len?(m2__).a[i__]:0)+(i__<(m1__).len?(m1__).a[i__]:0),(m1__).a[i__]=tempi__%MAREMASK,tempi__/=MAREMASK;if(i__>(m1__).len)(m1__).len=i__;}
printmare(mare m){int i;if(!m.len)return 0;printf("%d",m.a[m.len-1]);for(i=m.len-1;i--;)printf(MAREPRINTFORMAT,m.a[i]);}
#define min(a,b) ((a)<(b)?a:(b))
mare a[2][201];
int n,k,i,j;
main(){freopen("perm.in","r",stdin);freopen("perm.out","w",stdout);
scanf("%d %d",&n,&k);mare tempm;
mplusi(a[1][1],1,0);
for(i=1;i<n;i++){for(j=1;j<=min(i,k);j++)newmare(a[(i+1)&1][j]);
for(j=1;j<=min(i,k);j++){
mtimesi(a[i&1][j],tempm,i);mplusm(a[(i+1)&1][j],tempm);
mplusm(a[(i+1)&1][j+1],a[i&1][j]);}}
printmare(a[n&1][k]);
}