一个复数(x+iy)集合,两种操作作用在该集合上: 1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE; 2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE; 最开始要读入一个int n,表示接下来的n行每一行都是一条命令。
示例输入:
3
Pop
Insert 1+i2
Pop
示例输出:
empty
SIZE = 1
1+i2
SIZE = 0
我想用algorithm中的max_element来找出Pop的复数值,并且使用自定义谓词:
bool MAX(Com Ca,Com Cb)//Com是两个复数
{
if((Ca.R*Ca.R+Ca.I*Ca.I)>(Cb.R*Cb.R+Cb.I*Cb.I))//判断模长
return true;
else if(Ca.R*Ca.R+Ca.I*Ca.I==Cb.R*Cb.R+Cb.I*Cb.I)//在模长相等的时候,判断虚部
{
if(Ca.I<Cb.I)
return true;
}
return false;
}
但是没有accepted,我把max_element改成了min_element,结果对了。
问:为什么max_element是错的,而min_element是对的?
使用max_element时,没通过的测试用例:
输入:88 Insert 407+i235 Insert 242+i490 Pop ……
正确输出:
SIZE = 1
SIZE = 2
242+i490
SIZE = 1
实际:
SIZE = 1
SIZE = 2
407+i235
SIZE = 1
慕哥6287543
ibeautiful