ZeroJudge A271: 彩色蘿蔔

在一個神奇的國度裡,有一種兔子,它只吃蘿蔔,且每天只吃一個,蘿蔔有四種顏色,分別為:紅蘿蔔,白蘿蔔,黃蘿蔔,發霉的蘿蔔(黑色),兔子吃了蘿蔔之後,體重會有不同的變化,紅蘿蔔吃了胖xg白蘿蔔吃了胖yg黃蘿蔔吃了瘦zg (醃黃蘿蔔真難吃…),發霉的蘿蔔吃了瘦wg (附加狀態:中毒…),現在給你x,y,z,w問你幾天後,兔子的體重!

P.S. 中毒會使兔子每天瘦ng(中毒當天不算),且中毒狀態可累加,m是兔子初始的體重。早上先中毒,晚上才吃東西

範例測資

範例輸入範例輸出
第一行是測資的筆數,每筆測資第一行是 x、y、z、w、n、m,第二行是一串數字,1代表紅蘿蔔,2代表白蘿蔔,3代表黃蘿蔔,4代表黑蘿蔔,0代表沒吃。這一行中的數字為兔子這段時間內所吃的食物。請輸出兔子在那段時間後所剩的體重,如果體重有在任意時刻少於等於0請輸出:「bye~Rabbit」,不然請印出結束時的體重。
有可能問你第一天的體重歐!(就是問初始體重,也就是那行根本沒輸入)
例如如:
13 312 43 432 567
//空一行
輸出為:567
4
5 3 2 4 3 10
1 1 2 3 3 3 3 4 3 3
5 3 2 4 3 10
1 1 2 3 3 3 3 4 3 3 2 2 2 2 2 2 2
5 3 2 4 3 10
4 1 3 3 1 1 2 2 1 1 3 1 1 1 1 4
10 3 2 2 1 5
1 4 4 0 0 4 1 2 2 2 0 0 2 2 0
1g
bye~Rabbit
bye~Rabbit
bye~Rabbit

解題思路

使用字串的方式將每筆資料的第二行存起來。接下來可以使用For迴圈將不是空白的字元存到一個陣列裡 (因第二行的整數只會有個位數)。之後再使用For迴圈來做判斷兔子體重的增減。更高階的方式可以使用StringStream來進行解題。要注意的是,一開始cin完6個整數之後要先做一次沒有意義的getline不然getline會失效這點要注意,或者是使用cin.ignore()也可以。為了避免TLE,在做體重增減判斷時,如果已經發現兔子的體重小於0,可以直接把For迴圈break掉,然後使用布林值來判斷是否要輸出兔子當前的體重。

範例程式碼-ZeroJudge A271: 彩色蘿蔔

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

int main() {
  int N;
  int red, white, yellow, black, poison, current;
  cin >> N;
  string str;
  for (int i = 0; i<N; i++)
    {
      cin >> red >> white >> yellow >> black >> poison >> current;
      getline(cin , str);
      getline(cin, str);
      int carrots[10000] = {};
      int tmp = 0;
      int count = 0;
      bool dead = false;
      for (int j = 0; j<str.length(); j++)
        {
          if (str[j] != ' ')
          {
            carrots[tmp] = str[j] - '0';
            tmp += 1;
          }
        }
      for (int i = 0; i<tmp; i++)
        {
          current -= count * poison;
          if (current <= 0)
          {
            cout << "bye~Rabbit" << endl;
            dead = true;
            break;
          }
          
          if (carrots[i] == 1)
          {
            current += red;
          }
          else if (carrots[i] == 2)
          {
            current += white;
          }
          else if (carrots[i] == 3)
          {
            current -= yellow;
          }
          else if (carrots[i] == 4)
          {
            current -= black;
            count += 1;
          }
          
          if (current <= 0)
          {
            cout << "bye~Rabbit" << endl;
            dead = true;
            break;
          }
        }
      if (!dead)
      {
        cout << current << "g" << endl;
      }
    }
}

//ZeroJudge A271
//Dr. SeanXD

發佈留言