維基解密
Time Limit: 1 Seconds Memory Limit: 65536K
在最近一期的維基解密中,公佈了一串神祕的數字,這引起了很多的猜想。
但是隻有百小度知道其中的含義——因爲這些神祕的數字就是他留下的記錄!
其實你有所不知,現在每天忙碌於百度大廈實習的百小度,在學校讀書期間有一大愛好——每當他遇到一個MM,總是會不由自主地從相貌和身材上分別給其打分,首先他會在相貌上選擇一個奇數分a (-10^18<=a<=10^18),然後在身材上再選擇一個偶數分b (-10^18 <= b <= 10^18),最後把a與b的乘積v作爲總分記錄下來。
這就是維基解密公佈的神祕數字!
現在,已知這些分數v,你能還原MM們的初始分a,b嗎?
Input
輸入數據的第一行是一個整數T,表示測試數據的組數;
然後是T組測試數據,每組測試數據包含一個整數v(-10^18<=v<=10^18)。
Output
請對應每組測試數據輸出格式如"Case X: face : A figure : B"的結果。
其中,X是測試數據的編號,A和B則分別代表MM的初始面貌分和身材分。
如果總分不能被還原,請輸出"Case X: illegal score."
特別提醒:
1、百小度是個很注重外貌的人,如果有多種答案,只要輸出相貌分最高的那種情況即可。
2、MM的分數v可能爲正,也可能爲負,甚至可能爲0;
3、注意輸出格式,比如大小寫、空格等;
4、也許你會就此將百小度歸爲資深屌絲一族,但是,誰沒有一段苦逼的青蔥歲月呢?
Sample Input
2
7
18
Sample Output
Case 1: illegal score.
Case 2: face : 9 figure : 2
解題:
/*
* 因爲v是奇數與偶數的乘積,則v必然是偶數
* 如果v是奇數,直接輸出非法
* 如果v偶數,爲了保證a儘可能大,b必須取最小的偶數2或者-2(這要取決於v的正負),
* 但是這裏面有個意外,就是當v是0時要單獨處理,因爲v=0時,a,b至少有一個爲0,
* 於是b=0, a=10^18 - 1
*/
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- using namespace std;
- int main()
- {
- int total;
- cin >> total;
- for(int iCase = 1; iCase <= total; ++iCase)
- {
- long long v;
- cin >> v;
- cout << "Case " << iCase << ": ";
- if( v&1 )
- cout << "illegal score.";
- else
- {
- long long face, figure;
- if( v )
- {
- figure = (v > 0)?2:-2;
- face = v/figure;
- }
- else
- {
- face = (long long)(1000000000000000000.0) - 1;
- figure = 0;
- }
- cout << "face : " << face << " figure : " << figure;
- }
- cout << endl;
- }
- return 0;
- }