---
# System prepended metadata

title: 口罩預購系統

---

# 口罩預購系統
https://neoj.sprout.tw/problem/799/
### 題目敘述
小芽是國的科技部長，因為病毒性肺炎的爆發，小芽決定帶領一群工程師建構自己的口罩預購系統。

然而，口罩的數量實在有限，因此一個人一個禮拜只能買一次口罩。

而且為了避免衛福部長開記者會時需要天天帶不同顏色的口罩，小芽希望購買的時候可以指定想要的顏色。

每種顏色都是用三種顏料調成的。但是顏料實在有限，如果指定的顏色顏料不足，就會用白色的口罩代替，因為白色是唯一不需要顏料的顏色

小芽定義了以下的資料型態：

```cpp
struct Color{ /* 各需要多少顏料 */
	int pigment1;
	int pigment2;
	int pigment3;
};
struct Customer{
	char name[20];
	int lastBuyMonth;
	int lastBuyDate;
	Color color;
};
```
假設今天是4月18日，且每種顏料一開始都有10000單位，要連續服務N個客人。

請你實作下列兩個函式

```cpp
bool isValid (Customer customer); //距離上次購買是否超過7天，即是否為4/11以前(含)購買
bool isAvailable (Customer customer); //指定的顏色是否有足夠的顏料可以製作口罩
```
### 上傳說明
你只需要完成並上傳isValid, isAvailable 兩個function就可以了。

**註：你有辦法不用全域變數做到嗎?

### 輸入說明
第一行有一個正整數N，代表有N個使用者。

接下來連續行，每行由一個字串及五個整數構成，依序代表使用者名稱、上次購買月份、上次購買日期、指定的顏色需要花掉多少顏料。

(你"無須"處理輸入的部分)

### 輸出說明
對於每位使用者：如果不能購買，輸出"Invalid."；如果"剩餘"顏料不足，只能買白色的口罩，輸出"Unavailable."；如果"剩餘"顏料足夠，可以購買指定顏色的口罩，輸出"You get what you want."。結尾皆須換行。

(你"無須"處理輸入的部分)

詳見範例說明。

### 範例程式
```cpp
#include 
#include 
using namespace std;

struct Color{
  int pigment1;
  int pigment2;
  int pigment3;
};

struct Customer{
  char name[20];
  int lastBuyMonth;
  int lastBuyDate;
  Color color;	
};
 
bool isValid(Customer customer); //距離上次購買是否超過7天，即是否為4/11以前(含)購買
bool isAvailable(Customer customer); //指定的顏色是否有足夠的顏料可以製作口罩
void getCustomer(Customer* customerPtr); //這隻程式已經幫你實作好了~

//你的程式會被放在這裡

int main(){
  int N;
  cin >> N;
  Customer customer;
  while(N--)
  {
    getCustomer(&customer); //把資料讀到customer裡

    if(!isValid(customer) )
      cout << "InValid.\n";
    else if(!isAvailable(customer) )
      cout << "Unavailable.\n";
    else
      cout << "You get what you want.\n";
  }
  return 0;
}
```
### 範例輸入
```
4

ABC 1 1 1 0 0

DEF 4 12 9998 10000 10000

GHI 1 12 9998 10000 10000

JKL 3 3 5 5 5
```
### 範例輸出
```
You get what you want.

Invalid.

You get what you want.

Unavailable.
```
### 範例說明
ABC上次購買超過7天，且10000 >= 1，10000 >= 0，10000 >= 0，因此可以製作指定顏色的口罩，顏料剩下(9999, 10000, 10000)

DEF上次購買不足7天，無法購買

GHI上次購買超過7天，且9999 >= 9998，10000 >= 10000，10000 >= 10000，因此可以製作指定顏色的口罩，顏料剩下(1, 0, 0)

JKL上次購買超過7天，但1 < 5，因此無法製作指定顏色的口罩，顏料維持(1, 0, 0)

### 測資說明
對於 10% 的測資，使用者上次購買皆超過七天，且皆要求白色
對於 40% 的測資，使用者皆要求白色
對於 100% 的測資，日期皆在1月1日至4月18日之間(假設平年)，名稱長度皆小於20，各種顏料的用量皆在0到INT_MAX之間
# Code
```cpp
bool isValid (Customer customer){
  if (customer.lastBuyMonth >= 4 && customer.lastBuyDate >= 11)
    return false;
  return true;
}


bool isAvailable (Customer customer){
  static int pigment1 = 10000, pigment2 = 10000, pigment3 = 10000;
  if (pigment1 - customer.color.pigment1 < 0)
    return false;
  if (pigment2 - customer.color.pigment2 < 0)
    return false;
  if (pigment3 - customer.color.pigment3 < 0)
    return false;
  pigment1 -= customer.color.pigment1;
  pigment2 -= customer.color.pigment2;
  pigment3 -= customer.color.pigment3;
  return true;
}
```