そんな感じですね。細かいところですが、少し修正を施すと、
for(i=1,Pwin=Qwin=Draw=0;i<mn-2;i++)for(j=i+1;j<mn-1;j++) for(k=j+1;k<mn;k++) for(l=k+1;l<=mn;l++)
で、空回りを回避してます。

もし、このアルゴリズムで、宝の数を一般数化するなら、i,j,k,...の変数を配列にしてループにいれるか、
再帰関数化するか等の方がスマートですが、二つで固定なら、提示したような感じがシンプルですね。

しかし、宝の数可変を前提にプログラムを組むなら、別の方策を取ります。
Qは時刻 c に最初の宝を見つけるので、
・Pの宝の発見時刻が全てcより大きい → Qの勝ち
・Pの宝の発見時刻にcを含み、残りは全てcより大きい → 引き分け
・それ以外 → Pの勝ち
です。
Qは、時刻cに、マスcを調査するので、マスc+1、c+2、...の中に、P[x]>c を満たす
マスがいくつあるかをあらかじめカウントし、テーブル化すれば、あとは、
二項係数の積の和だけの、プログラムとなると思います。