PAT1002 A+B for Polynomials

📅 发布时间:2026/7/13 8:39:22 👁️ 浏览次数:
PAT1002 A+B for Polynomials
首先英文题面那么我们必须得看懂一些关键polynomials 多项式 nonzero terms 不为0非0项 exponents 指数 coefficients 系数 there must be NO extra space at the end of each line. 每一行的结尾必须没有额外的空格 Please be accurate to 1 decimal place 结果小数位数必须限制在一位。由题意我们很容易知道用数组保存所有的多项式的情况然后从大到小输出不为0的答案注意结尾不能为空格#include iostream #include cstdio #include unordered_map #include algorithm #include cstring using namespace std; int a; double shu[1005]; double t; int cnt; int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int K; //memset(shu,-1,sizeof(shu)); for(int i0;i2;i) { cinK; for(int j0;jK;j) { cina; cint; if(shu[a]0) cnt; shu[a]t; } } printf(%d,cnt); for(int i1004;i0;i--) { if(shu[i]!0) { printf( %d %.1f,i,shu[i]); } } return 0; }但这样只会部分正确因为我们没有考虑有的t等于负数与其他地方的t为正数相结合使得该项为0的情况。而当其为0的时候我们需要把这个情况跟去掉。因此#include iostream #include cstdio #include unordered_map #include algorithm #include cstring using namespace std; int a; double shu[1005]; double t; int cnt; int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int K; //memset(shu,-1,sizeof(shu)); for(int i0;i2;i) { cinK; for(int j0;jK;j) { cina; cint; if(shu[a]0.0) cnt; shu[a]t; if(shu[a]0.0) { cnt--; } } } printf(%d,cnt); for(int i1004;i0;i--) { if(shu[i]!0.0) { printf( %d %.1f,i,shu[i]); } } return 0; }题目不难但难在边界情况不好想需要我们注意题目上没有说多项式的系数不能为负。正数和负数相抵消会使值为0.0所以我们要考虑这样的一种情况。除了这种很暴力的写法我们还可以采用哈希表排序的方法这个方法我刚写的时候就想到了但感觉比较麻烦就没有采用。麻烦在对哈希表的排序对哈希表进行排序是把pairint,double放到vector里面vectorpairint,double result; for(auto it:mp) { if(it.second!0.0) { result.push_back(it); } } sort(result.begin(),result.end(),cmp);完整代码如下#include iostream #include cstdio #include unordered_map #include algorithm #include cstring #include map #include vector using namespace std; int a; double shu[1005]; double t; int cnt; unordered_mapint,double mp; bool cmp(pairint,double a,pairint,double b) { return a.firstb.first; } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int K; //memset(shu,-1,sizeof(shu)); for(int i0;i2;i) { cinK; for(int j0;jK;j) { cina; cint; mp[a]t; } } //这样就把所以符合条件的情况给统计在哈希表中了 //只需要对哈希表进行排序即可 //对哈希表进行排序只能说是把pairint,double放到vector里面 // vectorpairint,double result; for(auto it:mp) { if(it.second!0.0) { result.push_back(it); } } sort(result.begin(),result.end(),cmp); printf(%d,result.size()); for(int i0;iresult.size();i) { printf( %d %.1f,result[i].first,result[i].second); } return 0; }我刚开始就是在用pair这里卡到的没有想到还需要用pair所以没有用这种方法。