百練2712細菌繁殖解題報告

5269 ワード

1.リンク:http://poj.grids.cn/practice/2712/
2.タイトル:
総時間制限:
1000 ms
メモリ制限:
65536 kB
説明
一つの細菌の繁殖速度は毎日倍増しています。例えば、初日は10個で、翌日は20個になり、3日目は40個になり、4日目は80個になります。最初の日と細菌の数を指定します。プログラムを書いて、ある日まで細菌の数を求めます。
入力
最初の行には整数nがあり、テストデータの数を表しています。その後、n行には5つの整数があり、整数の間は1つのスペースで区切られます。最初の数は一日目の月、二番目の数は一日目の日付、三番目の数は一日目の細菌の数、四番目の数は要求されたその日の月、五番目の数は要求されたその日の日付を表します。最初の日と要求された日は同じ年で、その年は閏年ではないことが分かりました。要求される日は必ず初日の後です。データは、一日の菌数が長い整数の範囲内であることを保証します。
出力
各グループのテストデータに対して、1行を出力します。この行には1つの整数が含まれています。1日の菌数が必要です。
サンプル入力
2

1 1 1 1 2

2 28 10 3 2

サンプル出力
2

40

3.コード
 1 #include <iostream>

 2 #include <cstdio>

 3 #include <cstdlib>

 4 #include <cstring>

 5 

 6 using namespace std;

 7 

 8 int days_of_month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

 9 

10 int main()

11 {

12      int n;

13      cin>>n;

14      

15      int month1,month2,day1,day2,day;

16      long start_num,total_num;

17      while(n--)

18      {

19                cin>>month1>>day1>>start_num>>month2>>day2;

20                day = 0;

21                while(month1<month2)

22                {

23                   day += (days_of_month[month1-1] - day1 + 1);

24                   month1++;

25                   day1 = 1;

26                }

27                day += (day2 - day1);

28                   total_num = start_num;

29                while(day--)

30               {

31                              total_num *= 2;                 

32               }

33               cout<<total_num<<endl;

34      }

35      return 0;

36 }
4.考え方
(1)1つの配列は毎月の日数を保存してから作業を行います。