多项式加法问题

海浪SeaWave 2017-07-18 02:49:09
测试数据能过,提交上去一直是Runtime Error,卡了半天,求帮忙。
题目:http://cqsyz.openjudge.cn/xianxingbiao/12/
这是我的代码:
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;

// 项
class CItem {
public :
CItem() : m_iIndexA(0), m_iIndexB(0) {}
CItem(int iIndexA, int iIndexB) : m_iIndexA(iIndexA), m_iIndexB(iIndexB) {}

public :
int m_iIndexA, m_iIndexB;

public :
CItem operator + (const CItem & itemB) { return CItem(m_iIndexA + itemB.m_iIndexA, m_iIndexB); }
};

// 比较项的幂数,用于排序
bool CompareItem(const CItem & itemA, const CItem & itemB) {
return itemA.m_iIndexB > itemB.m_iIndexB;
}

// 队列
class CQueue {
public :
CQueue(int iSize) : m_pHead(-1), m_pTail(-1) { m_arrQueue = new CItem[iSize]; }
~CQueue() { delete [] m_arrQueue; }

public :
void Push(CItem value) { m_arrQueue[++m_pTail] = value; }
void Pop() { m_pHead++; }

CItem & GetFront() { return m_arrQueue[m_pHead + 1]; }
CItem & GetTail() { return m_arrQueue[m_pTail]; }
bool IsEmpty() { return m_pHead == m_pTail; }

void Clear() { m_pHead = m_pTail = -1; }
void Sort() { sort(m_arrQueue + m_pHead + 1, m_arrQueue + m_pTail + 1, CompareItem); }

public :
int m_pHead, m_pTail;
CItem * m_arrQueue;
};

// 打印结果
void PrintQueue(CQueue queIn)
{
bool bHasOuted = false;
while (!queIn.IsEmpty())
{
if (bHasOuted)
cout << ' ';
bHasOuted = true;
printf("[ %d %d ]", queIn.GetFront().m_iIndexA, queIn.GetFront().m_iIndexB);
queIn.Pop();
}
cout << endl;
}

int main()
{
int iDataTot;
string strTmp;
cin >> iDataTot;
for (int iData = 1; iData <= iDataTot; iData++)
{
CQueue queA(300), queB(300);
CQueue queResult(600);
CItem itemTmp;

while (true)
{
cin >> itemTmp.m_iIndexA >> itemTmp.m_iIndexB;
if (itemTmp.m_iIndexB < 0)
break;
queA.Push(itemTmp);
}
// 负幂数可能出现在一行的中间位置,在这里把一行的后面跳过
getline(cin, strTmp);

while (true)
{
cin >> itemTmp.m_iIndexA >> itemTmp.m_iIndexB;
if (itemTmp.m_iIndexB < 0)
break;
queB.Push(itemTmp);
}

getline(cin, strTmp);

queA.Sort();
queB.Sort();

while (!queA.IsEmpty() || !queB.IsEmpty())
{
if (queA.IsEmpty() || queA.GetFront().m_iIndexB < queB.GetFront().m_iIndexB)
{
if (queResult.GetTail().m_iIndexB != queB.GetFront().m_iIndexB)
queResult.Push(queB.GetFront());
else // 为了防止多项式中有多个幂数相同的项
queResult.GetTail().m_iIndexA += queB.GetFront().m_iIndexA;
queB.Pop();
}
else if (queB.IsEmpty() || queA.GetFront().m_iIndexB > queB.GetFront().m_iIndexB)
{
if (queResult.GetTail().m_iIndexB != queA.GetFront().m_iIndexB)
queResult.Push(queA.GetFront());
else
queResult.GetTail().m_iIndexA += queA.GetFront().m_iIndexA;

queA.Pop();
}
else
{
if (queA.GetFront().m_iIndexA + queB.GetFront().m_iIndexA)
if (queResult.GetTail().m_iIndexB != queA.GetFront().m_iIndexB)
queResult.Push(queA.GetFront() + queB.GetFront());
else
queResult.GetTail().m_iIndexA += queA.GetFront().m_iIndexA + queB.GetFront().m_iIndexA;
queA.Pop();
queB.Pop();
}
}
PrintQueue(queResult);
}
}

Runtime Error 0 548kB 17ms 2904 B
实在是找不出什么错误了,望各位前辈指教!
...全文
265 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧