/* ID: cs_diab1 TASK: LANG: C++ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define stop exit(0) #define nc -1 #define eps 1e-10 #define inf 1000000000 #define mod 1000000007 #define mp make_pair #define MAX 20 #define fill(array,value) memset(array,value,sizeof(array)) #define f(i,beg,end) for(int i=beg; i<=end; i++) #define F(i,beg,end) for(int i=beg; i>=end; i--) #define Max(a,b) ( (a>b)?a:b ) #define Min(a,b) ( (a-1) { if (g[prevr][col]<=left) { sol[prevr][col]='#'; left-=g[prevr][col]; ok1=1; } } if (prevc>-1) { if (g[row][prevc]<=left) { sol[row][prevc]='#'; left-=g[row][prevc]; ok2=1; } } used[row][col]=1; if (!ok1 && ok2) { dfs(prevr,col,left,s); return; } if (ok1 && !ok2) { dfs(row,prevc,left,s); return; } if (prevr>-1) dfs(prevr,col,left,s); else dfs(row,prevc,left,s); } void mark(long long left) { ll g1[21][21]; f(i,0,20) f(j,0,20) { g1[i][j]=g[i][j]*komb(2*MAX+2-i-j,i); } f(i,0,20) { f(j,0,20) cout<0) ? g[i-1][j] : 0; ll a2 = (j>0) ? g[i][j-1] : 0; g[i][j] = a1 + a2; } //f(i,0,MAX) { f(j,0,MAX) cout<0) ? d[i-1][j] : 0; ll a2 = (j>0) ? d[i][j-1] : 0; if (sol[i][j]=='.') d[i][j]=a1+a2; else d[i][j]=0; } /*f(i,0,MAX) { f(j,0,MAX) cout<>k; if (k==1) { cout<<".\n"; cout<