1212 3 3 3.6 2 6.0 1 1.6
1313 */
1414
15- #include < stdio.h>
16-
17- class Node {
18- public:
19- float a;
20- int n;
21- Node* next;
22-
23- Node (float aa, int nn) :
24- a (aa), n(nn), next(NULL ) {
25- }
26- };
27-
28- class Poly {
29- public:
30- int len;
31- Node* head;
32- Poly () :
33- len (0 ), head(NULL ) {
34- }
35- void print () {
36- printf (" %d " , len);
37- Node* cur = head;
38- for (int i = 0 ; i < len; i++) {
39- printf (" %d %.1f" , cur->n , cur->a );
40- if (i != (len - 1 ))
41- printf (" " );
42- cur = cur->next ;
43- }
44- if (len <= 0 )
45- printf (" 0 0" );
15+ #include < iostream>
16+ #include < unordered_map>
17+ #include < map>
18+ #include < vector>
19+ #include < stdio.h>
20+
21+ using namespace std ;
22+
23+ void read_poly (unordered_map<int ,float > &um) {
24+ int k;
25+ cin >> k;
26+ while (k--) {
27+ int a;
28+ float b;
29+ cin >> a >> b;
30+ um[a] += b;
4631 }
47- void insert (float a, int n) {
48- if (!head) {
49- head = new Node (a, n);
50- len++;
51- } else {
52- Node* cur = head;
53- Node* last = NULL ;
54- while (true ) {
55- if (!cur) {
56- last->next = new Node (a, n);
57- len++;
58- break ;
59- }
60- if (cur->n == n) {
61- cur->a += a;
62- if (cur->a == 0 ) {
63- if (last) {
64- last->next = cur->next ;
65- delete cur;
66- } else {
67- delete cur;
68- cur = NULL ;
69- }
70- len--;
71- }
72- break ;
73- }
74- if (cur->n < n) {
75- if (last) {
76- last->next = new Node (a, n);
77- last->next ->next = cur;
78- } else {
79- head = new Node (a, n);
80- head->next = cur;
81- }
82- len++;
83- break ;
84- }
32+ }
8533
86- last = cur;
87- cur = cur->next ;
88- }
89- }
90- }
91- };
9234
93- int main () {
94- int N;
95- scanf (" %d" , &N);
96- Poly p1, p2;
97- for (int i = 0 ; i < N; i++) {
98- int n;
99- float a;
100- scanf (" %d %f" , &n, &a);
101- p1.insert (a, n);
102- }
103- int N2;
104- scanf (" %d" , &N2);
105- for (int i = 0 ; i < N2; i++) {
106- int n;
107- float a;
108- scanf (" %d %f" , &n, &a);
109- Node* cur = p1.head ;
110- for (int j = 0 ; j < N; j++) {
111- p2.insert (cur->a * a, cur->n + n);
112- cur = cur->next ;
113- }
35+ int main ()
36+ {
37+ unordered_map<int , float > ua, ub;
38+ map<int , float > uc;
39+ read_poly (ua);
40+ read_poly (ub);
41+ for (auto &x : ua)
42+ for (auto &y : ub)
43+ uc[x.first +y.first ] += x.second *y.second ;
44+ vector<pair<int , float >> res;
45+ for (auto &x : uc)
46+ if (x.second != 0 .f )
47+ res.push_back (x);
48+ if (res.size () == 0 ) printf (" 0" );
49+ else {
50+ printf (" %d " , res.size ());
51+ for (int i=res.size ()-1 ; i>=0 ; --i)
52+ printf (" %d %.1f%c" , res[i].first , res[i].second , i?' ' :' \n ' );
11453 }
115-
116- p2.print ();
117-
11854 return 0 ;
119- }
120-
55+ }
0 commit comments