PAT A1009 Product of Polynomials (25分)

PAT A1009 Product of Polynomials (25分)

测试点 0一直没通过调试后发现 测试点 0 有负数,
在对数据处理的时候,没有考虑负数加正数和正好为0的情况!!!
这次用vector代替set发现去重和去零没有find函数需要遍历,但是排序方便了很多

#include<cstdio>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 5000;
double p[N];
vector<int> p_n;

bool cmp(int a,int b){//从大到小
    return a>b;
}
int main(){
//     freopen("data.txt","r",stdin);
    fill(p,p+N,0);
    int n,m;
    double a;
    map<int ,double> pa;
    scanf("%d" ,&m);
    for(int i = 0;i<m;i++){
        scanf("%d %lf",&n,&a);
        if(a!=0) pa.insert(make_pair(n,a));
    }
    scanf("%d" ,&m);
    for(int i = 0;i<m;i++){
        scanf("%d %lf",&n,&a);
        for(map<int,double>::iterator it = pa.begin();it!=pa.end();it++){
            int tempn = it->first+n;
            double tempa = it->second*a;
            
            if(p[tempn]==0&&tempa!=0){ 
                p_n.push_back(tempn);
            }
            p[tempn] += tempa;
            if(p[tempn]==0){
                for(int j = 0;j<p_n.size();j++){
                    if(p_n[j]==tempn){
                        p_n.erase(p_n.begin()+j);
                    }
                }
            } 
            
        }
    }
    if(p_n.size()==0) printf("0");
    else{
       sort(p_n.begin(),p_n.end(),cmp);
       printf("%d",p_n.size());
       for(int i = 0;i<p_n.size();i++){
           printf(" %d %.1f",p_n[i],p[p_n[i]]);
       }
    }
    return 0;

}
上一篇:【剑指offer】链表的基本操作之创建、插入、删除


下一篇:Linux下通过源码编译安装程序(configure/make/make install的作用,然后在/etc/profile文件里修改PATH环境变量)