Skip to content

Commit f4b90fe

Browse files
committed
pat
1 parent c9de8d3 commit f4b90fe

File tree

2 files changed

+37
-101
lines changed

2 files changed

+37
-101
lines changed

PAT/PAT_A/pat1009.cpp

Lines changed: 36 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -12,109 +12,44 @@
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+
}

PAT/PAT_A/pat1010.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Impossible
2525

2626
#include <iostream>
2727
#include <string>
28+
#include <math.h>
2829

2930
using namespace std;
3031

0 commit comments

Comments
 (0)