1. 程式人生 > >CSA Round #41 Tennis Tournament

CSA Round #41 Tennis Tournament

題目連結

題意:

淘汰賽制遊戲,給出K 和M ,求出一個排列使得第K個人恰在獲勝M場後被淘汰

分析:

(1<<M)1位置安排比K弱的,第(1<<M)位置安排K,第(1<<M)+1場安排比K強的,其它隨意安排。
在判斷不存在排列時,忽略了K為(1<<N),但M!=N的情況,導致wa了一發

程式碼:

int main()
{
    int n, k, m;

    scanf("%d%d%d", &n, &k, &m);
    if (k < (1 << m) || k == (1 << n) && m
!= n) { puts("-1"); } else { for (int i = 1; i < (1 << m); i++) { printf("%d ", i); } printf("%d ", k); for (int i = k + 1; i <= (1 << n); i++) { printf("%d ", i); } for (int i = (1 << m); i < k; i++) { printf
("%d ", i); } puts(""); } }