Relax! It's just a game(排列組合,簡單)

御史大夫發表於2012-08-30

Relax! It's just a game

Time Limit:3000MS    Memory Limit:0KB    64bit IO Format:%lld & %llu

Description

Download as PDF

You: What's the score? Did I miss much?

Me: It's 2-1 for elAhli and the second half just started. The first half was quite boring.

You: Who scored first? elAhli or ezZamalek?

Me: What difference does it make?

You: Big difference! I can predict the outcome of the match if I knew the order of which goals were scored in the first half.

Me: What do you mean?

You: It's 2-1 for elAhli, right? One of three things could have happened: elAhli scored two goals then ezZamalek scored; Or, elAhli scored its first goal, then ezZamalek, then elAhli again; Or, ezZamalek scored first, then elAhli scored its two goals.

Me: So?!! I still don't understand what difference does that make? It's still 2-1 for elAhli! Why don't you just relax and let us continue watching the game in peace.

You: You don't understand!! I believe theprobability of who'll win depends on the order of how goals were scored. Now I have to predict the outcome for 3 possibilities.

Me: And what if the score was 3-2? What would you have done then?

You: I would have to work for 5 different possibilities. No?

Me: Of course not! The number of possibilities isn't always equal to the sum.

You: Can you tell me when will it be equal to the sum?

Me: You're a programmer, why don't you write a program that counts the number of possibilities and compare it to the sum?

You: I don't have the time, I want to watch the match. Besides, I have nine other problems to worry about.

Me: I'll give you a hint. The possibilities will be equal to the sum only if one of the teams scored a certain number of goals.

Input

Your program will be tested on one or more test cases. Each test case specifies two natural numbers (A and B) (separated by one or more spaces) representing the score of the first half. No team will be able to score more than 10 goals. The last line of the input file contains two -1's (which is not part of the test cases.)

Output

Format For each test case where the number of possibilities is equal to the sum, print:


A+B=C


Where A and B are as above and C is their sum. If the number of possibilities is not equal to the sum, replace the `=' sign with `!=' (without the quotes.)

Sample Input

2 1
1 0
-1 -1

Sample Output

2+1=3
1+0=1


思路:進球總數為a+b,容易想到所有排列情況為(a + b)!,但注意同一個隊伍所進的球在排列中不應當視為互異,比如甲隊進2個球:a1,a2,則a1a2和a2a1是同一種排列,於是所有排列情況數應為:(a + b)! / (a ! * b!),所以可能的情況數等於兩隊進球總和時有:

(a + b)! / (a ! * b!)= a + b,即是(a + b - 1)! / (a ! * b!) = 1……(1)。.利用這個關係就能判斷對於特定的a和b,情況數和a+b的關係。注意題目中給的提示“The possibilities will be equal to the sum only if one of the teams scored a certain number of goals”,化簡(1),可以得到,a、b中最小值為1,也就是說,a和b至少有一個為1。

還需要注意的是,a = b = 0時,情況數不等於進球總數,這個時候情況數為1.

AC CODE:

//Memory: 0 KB 		Time: 12 MS
//Language: C++ 4.1.2 		Result: Accepted

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

long long fact(long long n)
{
    if(n == 1 || n == 0) return 1;
    else return n * fact(n - 1);
}

int main()
{
    long long a, b;
    int idx;
    double p;
    string str[2] = {"=", "!="};
    while(cin >> a >> b && a != -1 && b != -1)
    {
        idx = 1;
        if(a+b)
        {
            p = 1.0 * fact(a + b - 1) / fact(a) / fact(b);
            if(fabs(p - 1) <= 1e-8)
            idx = 0;
        }
        cout << a << "+" << b << str[idx] << a + b << endl;
    }
    return 0;
}




相關文章