【请使用C++的模板类来完成此问题】
Bittersweet便利店迎来4周年店庆,店主BS举行了为期一周的有奖竞猜活动,活动规则如下:
桌子上摆放了A、B、C三个盒子,A盒子中可能有写着1到10整数的纸条,B盒子中可能有写着0.1到1.0小数的纸条,C盒子中可能有一个带颜色(maki红、eri黄、umi蓝)的小球;
店主BS可能在任意时刻做三件事情:选择一个盒子并清空它,选择一个盒子并放入相应物品,选择一个盒子并修改其中物品的属性;
在某一时刻到店来的顾客可以参与有奖竞猜,首先顾客选择一个盒子,如果盒子为空则没有中奖,如果盒子非空,店主BS会要求顾客猜测其中的内容物,如果顾客答对了,则中奖,否则也不算中奖。
三个盒子初始都是空的,现在给定BS的操作序列和顾客的操作序列,请你对于每一个顾客的操作,给出其有奖竞猜结果。
注意:店主在选择一个盒子放入物品的时候,若所选盒子非空,则此操作无效,应当被忽略;店主在选择一个盒子修改其中物品属性的时候,若所选盒子为空,则此操作无效,应当被忽略。
程序中可能用到的相关类定义如下,你也可以不使用它们完全自己编写,能完成任务即可。
Input
仅包含一组测试样例。测试样例的第一行是一个整数n(0 < n <= 100),代表操作序列的条数。
接下来有n行,每行描述一条操作序列。操作序列格式为:
ROLE BOX [OP] [OPR]
其中ROLE是一个整数,代表动作发起人,取值为店主(1)或者顾客(2);BOX是一个char,代表选择的盒子,取值为'A'、'B'或'C';OP是一个整数,代表操作,对于店主取值为清空盒子(1)、放入物品(2)、修改物品属性(3),对于顾客取值只有猜测(1);OPR是一个整数(1-10)、一个浮点数(0.1-1.0)或者一个字符串("maki","eri","umi"),代表物品属性(店主清空盒子的操作不需要此字段)。
例如,1 C 2 "eri" 代表店主向C盒子里放入了一个eri黄色的小球,2 B 1 0.3 代表一个顾客猜测B盒子里有一张写着0.3的纸条。
Output
对于每一个顾客操作序列,在一行输出ta的中奖情况。若中奖,请输出“omedetou”,否则请输出“zannen”。
Sample Input:
12
1 A 2 3
1 C 2 maki
2 C 1 maki
1 B 2 0.6
1 A 1
2 A 1 3
1 B 3 0.5
2 B 1 0.5
1 B 2 0.6
2 B 1 0.6
1 A 3 3
2 A 1 3
Sample Output:
omedetou
zannen
omedetou
zannen
zannen
enum Color { //颜色枚举型定义
MAKI,
ERI,
UMI
};
class Ball { //小球类定义
private:
Color color;
public:
Ball();
Ball(const Color& c);
Color getColor() const;
void setColor(const Color& c);
};
template <class T>
class Optional { //盒子模板类定义
private:
T content; //盒子内容
bool isEmpty; //盒子是否为空
public:
Optional();
bool exists() const; //判断盒子是否为空
void clear(); //清空盒子
void set(const T& t); //放入物品
T get() const; //获取盒子中的物品
};