2013騰訊編程馬拉松初賽(3月23)賽題及第3,5題源代碼(C++)

1001Q系列故事——世界上最遙遠的距離

Time Limit: 0.2 Seconds   Memory Limit: 65536K

 

世界上最遙遠的距離

不是生與死
而是我就站在你面前
你卻不知道我愛你

 

世界上最遙遠的距離
不是我就站在你面前你卻不知道我愛你
而是明明知道彼此相愛
卻不能在一起

 

世界上最遙遠的距離
不是明明知道彼此相愛卻不能在一起
而是相約好了私奔的時間
我穿越到了未來你卻回去了古代

 

——摘自《小Q失戀日記》第117513

 

當小Q使出渾身解數,終於贏得HR女神芳心的時候,卻出現了一個意外情況,那就是白富美HR的媽媽並不同意他們交往,當聽說小Q只是一個碼農,特別是聽說小Q曾經參加過資本主義國家發起的SM/ICPC比賽的時候,更是堅決反對!

愛情是偉大的,但是得不到親人祝福的愛情卻備受折磨,小Q和HR相約在騰訊第二屆編程馬拉松大賽進行到第5天的時候(即2013324日),一起“向前穿越D天,然後開啓幸福新生活”。

其勇氣可謂令人讚歎,但可憐的小Q卻總是備受折磨——小Q理解的向前穿越是朝着未來的方向,而女友HR理解的“向前穿越”卻是朝着古代的方向!

假設已知現在的日期和穿越的天數D,你能計算出小Q和女友各自到達的年代嗎?

 

Input

 

  輸入首先包含一個整數N,表示有N組測試用例;

  接下來N行是N組數據,每一行包含一個正整數DD<=10,0000),D表示向前穿越的天數。

 

Output

 

  請計算並輸出小Q和女友分別到達的日期,日期格式爲YYYY/MM/DD,兩個日期中間用一個空格隔開,每組數據佔一行,具體輸出格式請參見樣例。

 

Sample Input

 

2

6

30

 

Sample Output

 

2013/03/30 2013/03/18

2013/04/23 2013/02/22


1002威威貓系列故事——因式分解

Time Limit: 0.2 Seconds   Memory Limit: 65536K

“春天來了,萬物復甦,大地一片生機盎然,又到了動物們求偶的季節...

週末的威威貓雖然眼睛盯着電視屏幕,但是思緒卻停留在自己喜歡的數學問題上。

有人說孤獨是可恥的,但是單身一人的威威貓並不孤獨,隨着對數學的深入學習,威威貓甚至很慶幸自己沒有陷入兒女情長,因爲他有喜愛的數學相伴,最近,他就在潛心研究因式分解問題。

在我們學習數學的過程中,經常需要把一個多項式進行因式分解,也就是把它寫成乘積的形式,比如多項式x^2+3x+2分解因式的結果就是(x+1)(x+2)。這個因式一眼就能看出來,但是當x的指數更高時,就不太容易分解了。

現在,威威貓就是在研究如何編寫程序來實現對多項式的因式分解。

Input

輸入第一行是一個整數T(T<=50),表示測試數據的組數;

接下來是T行字符串表示T個測試用例,每行1個數學多項式,多項式長度不會超過100個字符,每個多項式表示形式如下:   A[1]x^P[1]+A[2]x^P[2]+...+A[m]x^P[m]

其中0<=P[i]<=5A[i]表示x^P[i]的係數,A[i]=0時直接簡寫爲0,A[i]=1-1時分別簡寫爲x^P[i]-x^P[i]P[i]=01時分別簡寫爲A[i]A[i]x,且同一指數r的對應項係數之和的絕對值不超過1000,每行中沒有多餘空格,具體格式可參考Sample Input

Output

對於每組測試數據,首先輸出Case #X:X代表多項式編號,從1開始計數,然後輸出因式分解的結果,分解結果的表示形式規定如下:

(x+B[1])(x+B[2])...(x+B[m])

其中,B[1]<=B[2]<=...<=B[m],B[i]=0則不加括號直接簡寫爲x,如果無法表現成上述格式,則輸出"-1"

具體可參考Sample Output

Sample Input

4

x

x+1

-2x^2+x^2+x^3

2x+2

 

Sample Output

Case #1: x

Case #2: (x+1)

Case #3: (x-1)xx

Case #4: -1


1003小小明系列故事——遊戲的煩惱

Time Limit: 1.0 Seconds   Memory Limit: 32768K

 

小小明最近在玩一款遊戲,它由n*m大小的矩陣構成,矩陣上會隨機產生一些黑色的點,這些點它們可能會連在一起也可能會分開,這些點的個數沒有限制,但是每個1*1方格中最多隻可能有一個黑點產生。遊戲要求玩家以最短的時間用x*y的小矩陣覆蓋這個大矩陣,覆蓋的要求有以下2點:

1. x*y大小的小矩陣內必須有x*y個黑點。

2.多個小矩陣可以重疊,但是每個小矩陣放置的位置必須是獨一無二的,即不同的小矩陣內的黑點不能完全相同。例如1*2的矩陣可以橫着放,也可以豎着放,這兩種方法是不同的,即使它們可能共用黑點。

小小明是個粗心的孩子,他嘗試了很多遍都無法將所有的符合要求的小矩陣找到,聰明的你,能不能告訴煩惱中的小小明這個大矩陣裏有多少個滿足要求的小矩陣呢?

 

Input

 

題目有多組測試數據(不多於100個);

每組測試數據的第一行包含2個正整數nm,然後第二行是xynmxy的意思如題),接下來n行,每行m個字符,其中’ * ’表示黑點,’ . ’表示空白。

nm0則結束輸入。

 

[Technical Specification]

0 < n, m <= 2000

0 < x, y <= 1000

 

Output

 

請計算並輸出一共有多少個滿足要求的小矩陣,每組輸出佔一行。

 

Sample Input

2 3

1 2

**.

.**

0 0

 

Sample output

3

 


1004吉哥系列故事——最終數

Time Limit: 0.2 Seconds   Memory Limit: 65536K

2012年騰訊編程馬拉松比賽中,吉哥解決了一道關於斐波那契的題目,這讓他非常高興,也更加燃起了它對數學特別是斐波那契數的熱愛。現在,它又在思考一個關於斐波那契的問題:

假如我們現在已知斐波那契數是1123581321345589...

由於吉哥特別喜歡斐波那契數,它希望每個數中都包含斐波那契數,比如說130,其中包含了13,或者5534包含了5534,只要數位中含有至少一個斐波那契數就是吉哥想要的數。但是這種數實在太多了,於是它去掉那些僅僅含有小於10的斐波那契數的數,比如說1,僅僅含有1,所以被去掉;或者335只含有35,都是小於10的斐波那契數,所以也去掉;但是131是留下的,因爲它含有13,我們暫且稱這類數爲F,不難得到前幾個F數是 13 21 34 55 89113121130131...

霸氣的吉哥覺得這樣還不夠,它想將斐波那契進行到底——在前面F數的基礎上,吉哥要得到那些是第斐波那契數個的F數!就是說,我們假設F數從1開始標號,那麼13是第1F數,吉哥想要那些在F數中的排列或者說下標也要是斐波那契數的數,吉哥稱之爲最終數,如13213489130...

現在給你一個數n,吉哥想知道離n最近的最終數與n的差的絕對值是多少。

Input

輸入包含多組測試數據。

每組測試數據包含一個整數n ( 1 <= n <= 10^11)

n = -1,表示輸入結束。

Output

對於每個n,請輸出離n最近的最終數與n的差的絕對值。

 

Sample Input

1

100

-1

Sample Output

12

11

 


1005鄭廠長系列故事——體檢

Time Limit: 1.0 Seconds   Memory Limit: 32768K

 

鄭廠長不是正廠長

也不是副廠長

他根本就不是廠長

只是公司的一個碼農

 

鄭廠長所在的騰訊公司每一年都要組織員工體檢,比如量身高體重、測血壓之類的,今年也不例外。

這次總共有N位員工接受體檢,並且每個員工都需要做K個項目的檢查纔算完成整個體檢的流程。現在來了M個醫生爲員工做身體檢查,並且每一位醫生都帶齊了檢查這K個項目的器材來(也就是說每個醫生都能進行這K個項目中的任意一項檢查)

體檢的詳細流程是這樣的:

公司事先制定好了M份體檢單,每個醫生手上都各自拿到一份體檢單,上面已經安排好了檢查的次序,以及每一次檢查所對應的員工和項目。每個醫生按照體檢單上的次序爲相應的員工做相應的項目檢查。醫生拿到的體檢單上的名單也可以是空的,就是這個醫生不需要檢查任何員工的任何項目。

當然,制定出的這M份體檢單不能有問題存在,否則就會有混亂的情況發生。按照常理來說,同一個醫生在同一時間只能爲一個員工做一個項目的檢查。另外,同一個員工在同一時間也只能進行一個項目的檢查,當然,不同的醫生或不同的員工可以在同一時間進行項目檢查。現在假設每個員工的每個項目的檢查時間都是一分鐘(其它時間花費忽略不計,只考慮項目檢查工作所花費的一分鐘)

公司希望體檢的工作越快完成越好,由於鄭廠長大學期間曾經是一個ACMer,所以公司就將體檢的安排工作交給了他,他需要計算出最快需要多少分鐘能完成所有員工的體檢工作。

 

Input

 

輸入的第一行爲一個正整數T,表示有T組測試數據;

接下去有T組測試數據,每組測試數據佔一行,包含三個整數NKMN表示員工的人數,K表示體檢的項目數,M表示醫生的人數。

 

[Technical Specification]

T<=1000

1<=N<=100

1<=K<=10

1<=M<=100

Output

 

對於每組數據,輸出一個整數,表示最快需要多少分鐘才能完成所有員工的體檢工作。

 

 

Sample Input

 

2

2 1 1

3 2 2

 

Sample Output

 

2

3

 

Hint

對於第二組數據體檢單的安排可以是如下情況:

1個醫生的體檢單:員工A的項目1、員工A的項目2、員工B的項目2

2個醫生的體檢單:員工B的項目1、員工C的項目1、員工C的項目2

第一分鐘:第1個醫生檢查員工A的項目1,而第2個醫生檢查員工B的項目1

第二分鐘:第1個醫生檢查員工A的項目2,而第2個醫生檢查員工C的項目1

第三分鐘:第1個醫生檢查員工B的項目2,而第2個醫生檢查員工C的項目2

這樣就只需要3分鐘即可完成體檢工作。

 

 

其中第3題源代碼如下:

3:

#include <stdio.h>

void main()
{
 int n,m,x,y;
 scanf("%d %d",&n,&m);
 scanf("%d %d",&x,&y);
 
    while((n!=0)&&(m!=0))
    {
   char **k=new char*[n];
   int i;
   for(i=0;i<n;i++)
   {
   k[i]=new char[m+1];
   scanf("%s",k[i]);
   }
  
   int j,a,b,x1,y1,flag=1;
   int counts=0;
   for(i=0;i<=n-x;i++)
   {   
    x1=i;   
    for(j=0;j<=m-y;j++)//橫着放
    {
     y1=j;
     flag=1;//假設存在

     for(a=x1;a<x1+x;a++)
     {
      for(b=y1;b<y1+y;b++)
      {
       if(k[a][b]!='*')
       {
        flag=0;
        break;
       }

      }
      if(flag==0)
       break;
     }//完成一次判定
     if(flag==1)
                    counts++;
    }
   }
     
   if(x!=y)//豎着放
   {
    for(i=0;i<=n-y;i++)
    {
      x1=i;   
      for(j=0;j<=m-x;j++)
      {
      y1=j;
      flag=1;//假設存在

      for(a=x1;a<x1+y;a++)
      {
      for(b=y1;b<y1+x;b++)
      {
       if(k[a][b]!='*')
       {
        flag=0;
        break;
       }

      }
      if(flag==0)
       break;
      }
      if(flag==1)
                    counts++;
      }
    }
   }//end_of_if
  
   printf("%d\n",counts);

   scanf("%d %d",&x,&y);
    
    }  
}

5:

#include <stdio.h>

void main()
{
    int T,N,K,M;   
    scanf("%d",&T);
   
    int i;
    for(i=0;i<T;i++)
    {
        scanf("%d %d %d",&N,&K,&M);
        if(N<=M)//人少,醫生多
            printf("%d\n",K);
        else
        {
            int m;
            int f=(N*K)%M;
            if(f==0)
               m=(N*K)/M;
            else
               m=(N*K)/M+1;
            printf("%d\n",m);
        }   
    }  
}

 

發佈了32 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章