HDU 1538

http://acm.hdu.edu.cn/showproblem.php?pid=1538

经典经济学问题,海盗分金

分析http://www.guokr.com/article/41423/

#include <iostream>

#include <cstdio>



using namespace std;



int a[15];



int main() {

    a[0] = 2;

    for(int i = 1; ; i++) {

        a[i] = a[i-1] * 2;

        if(a[i] * 2 > 10000) break;

    }

    int T;

    scanf("%d", &T);

    int n, m, p;

    while(T--) {

        scanf("%d%d%d", &n, &m, &p);

        int flag;

        if(n <= 2*m) {

            if(p == n) {

                printf("%d\n", m-(n-1)/2);

            }

            else {

                flag = n & 1;

                if((p & 1) == flag) puts("1");

                else puts("0");

            }

        }

        else if(n == 2*m+1) {

            if(p < 2*m && (p & 1)) puts("1");

            else puts("0");

        }

        else {

            flag = 0;

            for(int i = 0; i < 13; i++) {

                if(a[i] == n-2*m) {

                    puts("0");

                    flag = 1;

                }

            }

            if(flag) continue;

            flag = 0;

            if(p > 2 * m) {

                for(int i = 1; i < 13; i++) {

                    if(a[i]+2*m > n)

                    if(p-2*m > a[i-1] && p-2*m < a[i]) {

                        flag = 1;

                        puts("Thrown");

                    }

                }    

                if(!flag) puts("0");

            }

            else {

                puts("0");

            }

        }

    }

    return 0;

}
View Code

 

你可能感兴趣的:(HDU)