1002 A+B for Polynomials(25分)

绝了。这题好像pat乙级有做过,我记得当时是自己造了链表...这次我的想法也类似,为什么我总是往复杂的方面想呢?自己建结构体,还想着二分查找遍历向量来找到合适的插入位置,修修补补得了21分,最后一些边界情况实在是不想处理(比如可以输入重复的指数项,或者当计算结果为0项时要只输出0),代码写的丑的要死,各种if else嵌套,判断条件还贼奇怪,思路不清晰,我以后再看一遍估计都看不懂。别人直接开了个1000多容量的数组短短几行就处理完了...思路简单粗暴。然后直接删掉自己写的,仿照别人的思路写了个比较简洁的答案。顺便学了些map的使用。看来学的那些高级的数据结构不用自己手撸一遍,STL里封装了好多,可以直接用了。之前刷乙级学了vector就感觉捡到宝了好方便,还要多学一些别的STL。
注意:
1.系数为0的项要去掉
2.项数为0只输出0,别加空格
3.可以重复输入指数相同的项
1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 using namespace std; 5 6 int main(){ 7 int K; 8 int exp; 9 double coe; 10 map<int,double> data; 11 for(int i=0;i<2;i++) 12 { 13 scanf("%d",&K); 14 15 for(int j=0;j<K;j++) 16 { 17 scanf("%d%lf",&exp,&coe); 18 data[exp]=data[exp]+coe; 19 } 20 21 } 22 map<int,double>::iterator it=data.begin(); 23 while(it!=data.end()) 24 { 25 if(it->second==0) 26 { 27 data.erase(it++); 28 } 29 else 30 it++; 31 } 32 33 printf("%d",data.size()); 34 if(data.size()){ 35 for(map<int,double>::reverse_iterator it=data.rbegin();it!=data.rend();) 36 { 37 printf(" %d %.1f",it->first,it->second); 38 it++; 39 } 40 } 41 42 return 0; 43 }

浙公网安备 33010602011771号