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 }

 

posted @ 2020-03-04 16:15  wsshub  阅读(149)  评论(0)    收藏  举报