百度之星12月30號題目之維基解密

維基解密


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

 */ 

  1. #include <iostream> 
  2.  
  3. #include <cstdio> 
  4.  
  5. #include <cstdlib> 
  6. #include <cmath> 
  7.  
  8. using namespace std; 
  9.  
  10.  
  11. int main() 
  12.     int total; 
  13.     cin >> total; 
  14.     for(int iCase = 1; iCase <= total; ++iCase) 
  15.     { 
  16.     long long v; 
  17.  
  18.     cin >> v; 
  19.  
  20.     cout << "Case " << iCase << ": "
  21.  
  22.     if( v&1 ) 
  23.         cout << "illegal score."
  24.     else  
  25.     { 
  26.         long long face, figure; 
  27.         if( v ) 
  28.         { 
  29.         figure = (v > 0)?2:-2; 
  30.         face = v/figure; 
  31.         } 
  32.         else  
  33.         { 
  34.         face =  (long long)(1000000000000000000.0) - 1; 
  35.         figure = 0; 
  36.         } 
  37.         cout << "face : " << face << " figure : " << figure; 
  38.     } 
  39.     cout << endl; 
  40.     } 
  41.     return 0; 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章