文章目錄
- 題目
- 思路
- AC代碼
- 識訓
題目

描述的很簡單,注意系數有可能是浮點數要用double存,
思路
其實思路很簡單,不需要使用map與vector,用一個結構體存盤每一項,有系數還有冪指數,然后第一次全部輸入,第二次輸入判斷這個結構體陣列中有沒有這個數,有的話就加上,沒有的話就在后面繼續接上即可,
AC代碼
#include <iostream>
#include <algorithm>
using namespace std;
struct num_I {
int c_num;
double x_num;
} I1[100000];
bool cmp(num_I A, num_I B) {
return A.c_num > B.c_num;
}
int main() {
int a, i = 0;
double b;
while (cin >> a >> b) {
if (a == 0 && b == 0) {
break;
}
I1[i].c_num = a;
I1[i].x_num = b;
++i;
}
int j = i;
bool flag;
while (cin >> a >> b) {
flag = false;
if (a == 0 && b == 0) {
break;
}
for (int s = 0; s < j; ++s) {
if (I1[s].c_num == a) {
flag = true;
I1[s].x_num += b; //說明找到了
break;
}
}
if (!flag) {
I1[i].c_num = a;
I1[i].x_num = b;
++i;
}
}
sort(I1, I1 + i, cmp);
for (int t = 0; t < i; ++t) {
if (I1[t].x_num)//要判斷系數是否為0
cout << I1[t].c_num << " " << I1[t].x_num << endl;
}
}
如果一直有兩組資料過不了的話,那么就試一下這一組資料看看行不行,
輸入樣例:
3 -14
8 25
0 0
3 14
0 0
輸出樣例:
8 25(沒有3那一項的,因為此時系數為0,不用寫出來)
識訓
在最后那個,系數為0不用列印出來的樣例給了我啟發,其實CCF這類題目,它的資料太過于精妙,往往我們很難找出自己的錯誤所在,所以在接下來的刷題之路上,如果調了很多遍,還是有資料過不了的話,那么就要考慮:
1.大資料是否過得了 CCF畢竟是演算法競賽,肯定是要參入一點演算法復雜度的,如果大資料過不了的那么就說明我們的演算法不夠優秀,就要換時間復雜度更小的演算法,
2.有數型別的題目,要多關注0 就算是在數學上的話,0也是一個讓很多競賽er既討厭又喜歡的數,很多題目會在0處設坑,本題就是一個很鮮明的例子,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295588.html
標籤:其他
