上次用链表写的,提交不对,这次改用数组写,还是提交不对,真心要疯了!
请高手指点!!
#include <iostream>
using namespace std;
void sortexpn(int p[])
{
int i,j,len = p[0];
for (i=2;i<=2*len;i=i+2)
for (j = 2; j <= 2*len - i; )
{
if (p[j] == p[j+2])
{
p[j-1] += p[j+1];
for (int k = j+3;k<=2*len;k++)
p[k-2] = p[k];
len--;
}
else if (p[j] < p[j+2])
{
int tmp1 = p[j];
p[j] = p[j+2];
p[j+2] = tmp1;
int tmp2 = p[j-1];
p[j-1] = p[j+1];
p[j+1] = tmp2;
j=j+2;
}
else
{
j = j+2;
}
}
p[0] = len;
}
void addpoly(int p1[],int p2[],int p3[])
{
int len1 = p1[0], len2 = p2[0],len3 = 0;
int i = 2,j = 2, k = 1;
while (i <= 2*len1 && j <= 2*len2)
{
if (p1[i] == p2[j])
{
int temp = p1[i-1]+p2[j-1];
if (temp != 0)
{
p3[k] = temp;
p3[k+1] = p1[i];
i = i+2;
j = j+2;
k = k+2;
len3++;
}
else
{
i = i+2;
j = j+2;
}
}
else if (p1[i] > p2[j])
{
p3[k] = p1[i-1];
p3[k+1] = p1[i];
i = i+2;
k = k+2;
len3++;
}
else
{
p3[k] = p2[j -1];
p3[k+1] = p2[j];
j = j+2;
k = k+2;
len3++;
}
}
if (i<=2*len1)
{
for (; i<=2*len1;i = i+2)
{
p3[k] = p1[i-1];
p3[k+1] = p1[i];
k = k+2;
len3++;
}
}
if (j<=2*len2)
{
for (;j<=2*len2;j=j+2)
{
p3[k] = p2[j -1];
p3[k+1] = p2[j];
k = k+2;
len3++;
}
}
p3[0] = len3;
}
int main()
{
int poly[200][300];
int n,i,j;
cin>>n;
for(i=0;i<2*n;i++)
{
j=1;
int len=0;
int coef,expn;
cin>>coef>>expn;
while(expn >= 0)
{
poly[i][j] = coef;
poly[i][j+1] = expn;
j += 2;
len++;
cin>>coef>>expn;
}
poly[i][0] = len;
}
for (i = 0; i<2*n;i = i+2)
{
sortexpn (*(poly+i));
sortexpn(*(poly+i+1));
int tmp[300];
addpoly(*(poly+i),*(poly+i+1),tmp);
for (int k=1;k <= 2*tmp[0];k=k+2)
cout<<"["<<tmp[k]<<" "<<tmp[k+1]<<"] ";
cout<<endl;
}
return 0;
}