PAT

UEFU/
// PAT

1001 A+B Format (20分)


题目要求:
计算A+B的和,以每三位一个”,”的格式输出。

用s数组记录每3位的数字,然后按照格式输出。
先输出最高位的数值也就是s[–e],然后是,s[e–]即可。
因为之前的循环e多1要先减1再用,之后都是先判断再减1再用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
using namespace std;

int main() {
int a, b, sum;
while (scanf("%d%d", &a, &b) == 2) {
sum = a + b;
if (sum == 0) printf("0\n");
else {
if (sum < 0) {
printf("-");
sum = -sum;
}
int s[10], e = 0;
while (sum) {
s[e++] = sum % 1000;
sum = sum / 1000;
}
printf("%d", s[--e]);
while (e--) {
printf(",%03d", s[e]);
}
printf("\n");
}
}

return 0;
}

-1000000 9
-999,991

还有个留着参考:
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
string s = to_string(a + b);
int len = s.length();
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == '-') continue;
if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ",";
}
return 0;
}

1002 A+B for Polynomials


相同次数的系数合并,统计系数不为0的项,输出。
a[exp] += num; 比如a[2]也就是x的平方的系数。exp = 0也就是常数项。
因为没有说同一行输入不会出现相同次数的项,因此要+=,当然+=也能很好地处理系数不同的问题。

求8x²-7x+5与3x²-4x+1的差。
解: (8x²-7x+5)-(3x²-4x+1)
=8x²-7x+5-3x²+4x-1
=5x²-3x+4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;

int main() {
int k1, k2, exp;
float num;
float a[1001] = {0};
scanf("%d", &k1);
for (int i = 0; i < k1; i++) {
scanf("%d%f", &exp, &num);
a[exp] += num;
}
scanf("%d", &k2);
for (int i = 0; i < k2; i++) {
scanf("%d%f", &exp, &num);
a[exp] += num;
}
int cnt = 0;
for (int i = 0; i < 1001; i++) {
if (a[i] != 0) cnt++;
}
printf("%d", cnt);
for (int i = 1000; i >= 0; i--) {
if (a[i] != 0) {
printf(" %d %.1f", i, a[i]);
}
}

return 0;
}

2 1 2.4 0 3.2
2 2 1.5 1 0.5
3 2 1.5 1 2.9 0 3.2

1003 Emergency (25 分)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;

const int MAXV = 510;
const int INF = 0x3fffffff;

int n, m, st, ed, G[MAXV][MAXV], weight[MAXV];
int d[MAXV], w[MAXV], num[MAXV];
bool vis[MAXV] = {false};

void Dijkstra(int s) {
fill(d, d + MAXV, INF);
memset(num, 0, sizeof(num));
memset(w, 0, sizeof(w));
d[s] = 0;
w[s] = weight[s];
num[s] = 1;
for (int i = 0; i < n; i++) {
int u = -1, MIN = INF;
for (int j = 0; j < n; j++) {
if (vis[j] == false && d[j] < MIN) {
u = j;
MIN = d[j];
}
}
if (u == -1) {
return;
}
vis[u] = true;
for (int v = 0; v < n; v++) {
if (vis[v] == false && G[u][v] != INF) {
if (d[u] + G[u][v] < d[v]) {
d[v] = d[u] + G[u][v];
w[v] = w[u] + weight[v];
num[v] = num[u];
} else if (d[u] + G[u][v] == d[v]) {
if (w[u] + weight[v] > w[v]) {
w[v] = w[u] + weight[v];
}
num[v] += num[u];
}
}
}
}
}

int main() {
scanf("%d%d%d%d", &n, &m, &st, &ed);
for (int i = 0; i < n; i++) {
scanf("%d", &weight[i]);
}
int u, v;
fill(G[0], G[0] + MAXV * MAXV, INF);
for (int i = 0; i < m; i++) {
scanf("%d%d", &u, &v);
scanf("%d", &G[u][v]);
G[v][u] = G[u][v];
}
Dijkstra(st);
printf("%d %d", num[ed], w[ed]);

return 0;
}


5 6 0 2
1 2 1 5 3
0 1 1
0 2 2
0 3 1
1 2 1
2 4 1
3 4 1

2 4

1004 Counting Leaves

1
2


1006 Sign In and Sign Out (25 分)

1
2


1005 Spell It Right


题目大意:
输入一个数字,把数字的每一位相加,用英文输出最后总和的每一位数字。
因为输入的数字可能很大,所以用字符串的形式输入。即使每一位是9,和也不过是900罢了。
之后转换为字符串,输出每一位的数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;

int main() {
string str;
cin >> str;
int sum = 0;
for (int i = 0; i < str.length(); i++) {
sum += (str[i] - '0');
}
string s = to_string(sum);
string digits[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
cout << digits[s[0] - '0'];
for (int i = 1; i < s.length(); i++) {
cout << " " << digits[s[i] - '0'];
}

return 0;
}

12345
one five

1006 Sign In and Sign Out


题目大意:
告诉你M个工作人员的出入记录,最早进门的人负责开门,最晚出门的负责关门。
请问,谁开的门和谁关的门。

总体思想是把所有人的进出时间统一到一个可以比较的刻度上,比如,进出时间是当天的第几秒。
之后用2个临时变量保存当前着的进出时间和最早和最晚比,更新最早和最晚时间。
输出最后结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
using namespace std;


int main() {
int n, minn = INT32_MAX, maxn = INT32_MIN;
scanf("%d", &n);
string unlocked, locked;
for (int i = 0; i < n; i++) {
string t;
cin >> t;
int h1, h2, m1, m2, s1, s2;
scanf("%d:%d:%d %d:%d:%d", &h1, &m1, &s1, &h2, &m2, &s2);
int tempIn = h1 * 3600 + m1 * 60 + s1;
int tempOut = h2 * 3600 + m2 * 60 + s2;
if (tempIn < minn) {
minn = tempIn;
unlocked = t;
}
if (tempOut > maxn) {
maxn = tempOut;
locked = t;
}
}
cout << unlocked << " " << locked;

return 0;
}


3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40

SC3021234 CS301133

1007 Maximum Subsequence Sum


题目大意:
输出最大子序列和,以及首尾元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
using namespace std;

int main() {
int n;
scanf("%d", &n);
int num[n + 1];
int left = 0, right = n - 1, sum = -1, temp = 0, tempindex = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &num[i]);
temp = temp + num[i];
if (temp < 0) {
temp = 0;
tempindex = i + 1;
} else if (temp > sum) {
sum = temp;
left = tempindex;
right = i;
}
}
if (sum < 0) sum = 0;
printf("%d %d %d", sum, num[left], num[right]);

return 0;
}

10
-10 1 2 3 4 -5 -23 3 7 -21

10 1 4

1009 Product of Polynomials (25 分)


题目大意:
求2个多项式A*B后的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;

int main() {
int n1, n2, a, cnt = 0;
double b, arr[1001] = {0.0}, ans[2001] = {0.0};
scanf("%d", &n1);
for (int i = 0; i < n1; i++) {
scanf("%d %lf", &a, &b);
arr[a] = b;
}
scanf("%d", &n2);
for (int i = 0; i < n2; i++) {
scanf("%d %lf", &a, &b);
for (int j = 0; j < 1001; j++) {
ans[j + a] += arr[j] * b;
}
}
for (int i = 2000; i >= 0; i--) {
if (ans[i] != 0.0) cnt++;
}
printf("%d", cnt);
for (int i = 2000; i >= 0; i--) {
if (ans[i] != 0.0) {
printf(" %d %.1f", i, ans[i]);
}
}

return 0;
}

2 1 2.4 0 3.2
2 2 1.5 1 0.5

3 3 3.6 2 6.0 1 1.6

❌ 1010 Radix (25 分)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <cctype>
using namespace std;

long long convert(string n, long long radix) {
long long sum = 0;
int index = 0, temp = 0;
for (auto it = n.rbegin(); it != n.rend(); it++) {
temp = isdigit(*it) ? *it - '0' : *it - 'a' + 10;
sum += temp * pow(radix, index++);
}
return sum;
}

long long find_radix(string n, long long num) {
char it = *max_element(n.begin(), n.end());
long long low = (isdigit(it) ? it - '0' : it - 'a' + 10) + 1;
long long high = max(num, low);
while (low <= high) {
long long mid = (low + high) / 2;
long long temp = convert(n, mid);
if (temp < 0 || temp > num) high = mid - 1;
else if (temp == num) return mid;
else low = mid + 1;
}
return -1;
}

int main() {
string n1, n2;
long long tag = 0, radix = 0, result_radix;
cin >> n1 >> n2 >> tag >> radix;
result_radix = tag == 1 ? find_radix(n2, convert(n1, radix)) : find_radix(n1, convert(n2, radix));
if (result_radix != -1) {
printf("%lld", result_radix);
} else {
printf("Impossible");
}

return 0;
}



6 110 1 10

2

1011 World Cup Betting (20)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
using namespace std;

int main() {
char c[4] = {"WTL"};
double res = 1.0;
for (int i = 0; i < 3; i++) {
double maxval = 0.0;
int maxchar = 0;
for (int j = 0; j < 3; j++) {
double t;
scanf("%lf", &t);
if (t >= maxval) {
maxval = t;
maxchar = j;
}
}
res *= maxval;
printf("%c ", c[maxchar]);
}
printf("%.2f", (res * 0.65 - 1) * 2);

return 0;
}

1.1 2.5 1.7
1.2 3.1 1.6
4.1 1.2 1.1

T T W 39.31

❌ 1012 The Best Rank (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <algorithm>
using namespace std;

struct student {
int id, best;
int score[4], rank[4];
}stu[2005];

int exist[1000000], flag = -1;

bool cmp(student x, student y) {
return x.score[flag] > y.score[flag];
}

int main() {
int n, m, id;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {
scanf("%d %d %d %d", &stu[i].id, &stu[i].score[1], &stu[i].score[2], &stu[i].score[3]);
stu[i].score[0] = (stu[i].score[1] + stu[i].score[2] + stu[i].score[3]) / 3.0 + 0.5;
}
for (flag = 0; flag <= 3; flag++) {
sort(stu, stu + n, cmp);
stu[0].rank[flag] = 1;
for (int i = 1; i < n; i++) {
stu[i].rank[flag] = i + 1;
if (stu[i].score[flag] == stu[i - 1].score[flag]) {
stu[i].rank[flag] = stu[i - 1].rank[flag];
}
}
}
for (int i = 0; i < n; i++) {
exist[stu[i].id] = i + 1;
stu[i].best = 0;
int minnum = stu[i].rank[0];
for (int j = 1; j <= 3; j++) {
if (stu[i].rank[j] < minnum) {
minnum = stu[i].rank[j];
stu[i].best = j;
}
}
}
char c[5] = {'A', 'C', 'M', 'E'};
for (int i = 0; i < m; i++) {
scanf("%d", &id);
int t = exist[id];
if (t) {
int best = stu[t - 1].best;
printf("%d %c\n", stu[t- 1].rank[best], c[best]);
} else {
printf("N/A\n");
}
}

return 0;
}

5 6
310101 98 85 88
310102 70 95 88
310103 82 87 94
310104 91 91 91
310105 85 90 90
310101
310102
310103
310104
310105
999999

1 C
1 M
1 E
1 A
3 A
N/A

1013 Battle Over Cities (25 分)

1
2


1015 Reversible Primes (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <cmath>
using namespace std;

bool isPrime(int n) {
if (n <= 1) return false;
int sqr = (int)sqrt(1.0 * n);
for (int i = 2; i <= sqr; i++) {
if (n % i == 0) return false;
}
return true;
}

int main() {
int n, d;
while (scanf("%d", &n) != EOF && n > 0) {
// if (n < 0) break;
scanf("%d", &d);
if (!isPrime(n)) {
printf("No\n");
continue;
}
int len = 0, arr[100];
while (n) {
arr[len++] = n % d;
n /= d;
}
for (int i = 0; i < len; i++) {
n = n * d + arr[i];
}
printf("%s", isPrime(n) ? "Yes\n" : "No\n");
}

return 0;
}

73 10
23 2
23 10
-2

Yes
Yes
No

1016 Phone Bills (25 分) UN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
string name;
int status, month, time, day, hour, minute;
};
bool cmp(node a, node b) {
return a.name != b.name ? a.name < b.name : a.time < b.time;
}
double billFromZero(node call, int *rate) {
double total = rate[call.hour] * call.minute + rate[24] * 60 * call.day;
for (int i = 0; i < call.hour; i++)
total += rate[i] * 60;
return total / 100.0;
}
int main() {
int rate[25] = {0}, n;
for (int i = 0; i < 24; i++) {
scanf("%d", &rate[i]);
rate[24] += rate[i];
}
scanf("%d", &n);
vector<node> data(n);
for (int i = 0; i < n; i++) {
cin >> data[i].name;
scanf("%d:%d:%d:%d", &data[i].month, &data[i].day, &data[i].hour, &data[i].minute);
string temp;
cin >> temp;
data[i].status = (temp == "on-line") ? 1 : 0;
data[i].time = data[i].day * 24 * 60 + data[i].hour * 60 + data[i].minute;
}
sort(data.begin(), data.end(), cmp);
map<string, vector<node> > custom;
for (int i = 1; i < n; i++) {
if (data[i].name == data[i - 1].name && data[i - 1].status == 1 && data[i].status == 0) {
custom[data[i - 1].name].push_back(data[i - 1]);
custom[data[i].name].push_back(data[i]);
}
}
for (auto it : custom) {
vector<node> temp = it.second;
cout << it.first;
printf(" %02d\n", temp[0].month);
double total = 0.0;
for (int i = 1; i < temp.size(); i += 2) {
double t = billFromZero(temp[i], rate) - billFromZero(temp[i - 1], rate);
printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2f\n", temp[i - 1].day, temp[i - 1].hour, temp[i - 1].minute, temp[i].day, temp[i].hour, temp[i].minute, temp[i].time - temp[i - 1].time, t);
total += t;
}
printf("Total amount: $%.2f\n", total);
}
return 0;
}

10 10 10 10 10 10 20 20 20 15 15 15 15 15 15 15 20 30 20 15 15 10 10 10
10
CYLL 01:01:06:01 on-line
CYLL 01:28:16:05 off-line
CYJJ 01:01:07:00 off-line
CYLL 01:01:08:03 off-line
CYJJ 01:01:05:59 on-line
aaa 01:01:01:03 on-line
aaa 01:02:00:01 on-line
CYLL 01:28:15:41 on-line
aaa 01:05:02:24 on-line
aaa 01:04:23:59 off-line

CYJJ 01
01:05:59 01:07:00 61 $12.10
Total amount: $12.10
CYLL 01
01:06:01 01:08:03 122 $24.40
28:15:41 28:16:05 24 $3.85
Total amount: $28.25
aaa 01
02:00:01 04:23:59 4318 $638.80
Total amount: $638.80

❌ 1017 Queueing at Bank (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
int come, time;
} tempcustomer;
bool cmp1(node a, node b) {
return a.come < b.come;
}
int main() {
int n, k;
scanf("%d%d", &n, &k);
vector<node> custom;
for(int i = 0; i < n; i++) {
int hh, mm, ss, time;
scanf("%d:%d:%d %d", &hh, &mm, &ss, &time);
int cometime = hh * 3600 + mm * 60 + ss;
if(cometime > 61200) continue;
tempcustomer = {cometime, time * 60};
custom.push_back(tempcustomer);
}
sort(custom.begin(), custom.end(), cmp1);
vector<int> window(k, 28800);
double result = 0.0;
for(int i = 0; i < custom.size(); i++) {
int tempindex = 0, minfinish = window[0];
for(int j = 1; j < k; j++) {
if(minfinish > window[j]) {
minfinish = window[j];
tempindex = j;
}
}
if(window[tempindex] <= custom[i].come) {
window[tempindex] = custom[i].come + custom[i].time;
} else {
result += (window[tempindex] - custom[i].come);
window[tempindex] += custom[i].time;
}
}
if(custom.size() == 0)
printf("0.0");
else
printf("%.1f", result / 60.0 / custom.size());
return 0;
}

1019 General Palindromic Number (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;

int main() {
int n, b;
scanf("%d %d", &n, &b);
int arr[100] = {0}, len = 0;
while (n) {
arr[len++] = n % b;
n /= b;
}
int flag = 1;
for (int i = 0; i < len / 2; i++) {
if (arr[i] != arr[len - 1 - i]) {
printf("No\n");
flag = 0;
break;
}
}
if (flag) printf("Yes\n");
for (int i = len - 1; i >= 0; i--) {
printf("%d", arr[i]);
if (i != 0) printf(" ");
}

return 0;
}

27 2
Yes
1 1 0 1 1

1020 Tree Traversals (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <queue>
using namespace std;

const int maxn = 50;

struct node {
int data;
node* lchild;
node* rchild;
};

int pre[maxn], in[maxn], post[maxn];
int n;

node* create(int postL, int postR, int inL, int inR) {
if (postL > postR) {
return NULL;
}
node* root = new node;
root->data = post[postR];
int k;
for (k = inL; k <= inR; k++) {
if (in[k] == post[postR]) {
break;
}
}
int numLeft = k - inL;
root->lchild = create(postL, postL + numLeft - 1, inL, k - 1);
root->rchild = create(postL + numLeft, postR - 1, k + 1, inR);
return root;
}

int num = 0;
void BFS(node* root) {
queue<node*> q;
q.push(root);
while (!q.empty()) {
node* now = q.front();
q.pop();
printf("%d", now->data);
num++;
if (num < n) printf(" ");
if (now->lchild != NULL) q.push(now->lchild);
if (now->rchild != NULL) q.push(now->rchild);
}
}

int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &post[i]);
}
for (int i = 0; i < n; i++) {
scanf("%d", &in[i]);
}
node* root = create(0, n - 1, 0, n - 1);
BFS(root);

return 0;
}

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

4 1 6 3 5 7 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct node {
int index, value;
};
bool cmp(node a, node b) {
return a.index < b.index;
}
vector<int> post, in;
vector<node> ans;
void pre(int root, int start, int end, int index) {
if (start > end) return;
int i = start;
while (i < end && in[i] != post[root]) i++;
ans.push_back({index, post[root]});
pre(root - 1 - end + i, start, i - 1, 2 * index + 1);
pre(root - 1, i + 1, end, 2 * index + 2);
}
int main() {
int n;
scanf("%d", &n);
post.resize(n);
in.resize(n);
for (int i = 0; i < n; i++) scanf("%d", &post[i]);
for (int i = 0; i < n; i++) scanf("%d", &in[i]);
pre(n - 1, 0, n - 1, 0);
sort(ans.begin(), ans.end(), cmp);
for (int i = 0; i < ans.size(); i++) {
if (i != 0) cout << " ";
cout << ans[i].value;
}
return 0;
}

❌ 1021 Deepest Root (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
int n, maxheight = 0;
vector<vector<int>> v;
bool visit[10010];
set<int> s;
vector<int> temp;
void dfs(int node, int height) {
if(height > maxheight) {
temp.clear();
temp.push_back(node);
maxheight = height;
} else if(height == maxheight){
temp.push_back(node);
}
visit[node] = true;
for(int i = 0; i < v[node].size(); i++) {
if(visit[v[node][i]] == false)
dfs(v[node][i], height + 1);
}
}
int main() {
scanf("%d", &n);
v.resize(n + 1);
int a, b, cnt = 0, s1 = 0;
for(int i = 0; i < n - 1; i++) {
scanf("%d%d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
for(int i = 1; i <= n; i++) {
if(visit[i] == false) {
dfs(i, 1);
if(i == 1) {
if (temp.size() != 0) s1 = temp[0];
for(int j = 0; j < temp.size(); j++)
s.insert(temp[j]);
}
cnt++;
}
}
if(cnt >= 2) {
printf("Error: %d components", cnt);
} else {
temp.clear();
maxheight = 0;
fill(visit, visit + 10010, false);
dfs(s1, 1);
for(int i = 0; i < temp.size(); i++)
s.insert(temp[i]);
for(auto it = s.begin(); it != s.end(); it++)
printf("%d\n", *it);
}
return 0;
}

1023 Have Fun with Numbers (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <string.h>
using namespace std;

int book[10] = {0};
int main() {
char num[32];
scanf("%s", num);
int flag1 = 0, flag2 = 1, len = strlen(num); // 不进一位 是源数字的重新排列
for (int i = len - 1; i >= 0; i--) {
int t = num[i] - '0';
book[t]++;
t = t * 2 + flag1;
flag1 = 0;
if (t >= 10) {
t = t - 10;
flag1 = 1;
}
num[i] = t + '0';
book[t]--;
}
for (int i = 0; i < 10; i++) {
if (book[i] != 0) {
flag2 = 0;
break;
}
}
printf("%s", (flag1 == 1 || flag2 == 0) ? "No\n" : "Yes\n");
if (flag1) printf("1");
printf("%s", num);

return 0;
}

123456789
Yes
246913578

1025 PAT Ranking (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct student {
long long no;
int score, finrank, local, localrank;
};

bool cmp(student a, student b) {
return a.score != b.score ? a.score > b.score : a.no < b.no;
}

int main() {
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif

int n, m;
scanf("%d", &n);
vector<student> fin;
for (int i = 1; i <= n; i++) {
scanf("%d", &m);
vector<student> v(m);
for (int j = 0; j < m; j++) {
scanf("%lld %d", &v[j].no, &v[j].score);
v[j].local = i;
}
sort(v.begin(), v.end(), cmp);
v[0].localrank = 1;
fin.push_back(v[0]);
for (int j = 1; j < m; j++) {
v[j].localrank = (v[j].score == v[j - 1].score) ? (v[j - 1].localrank) : (j + 1);
fin.push_back(v[j]);
}
}
sort(fin.begin(), fin.end(), cmp);
fin[0].finrank = 1;
for (int j = 1; j < fin.size(); j++) {
fin[j].finrank = (fin[j].score == fin[j - 1].score) ? (fin[j - 1].finrank) : (j + 1);
}
printf("%d\n", fin.size());
for (int i = 0; i < fin.size(); i++) {
printf("%013lld %d %d %d\n", fin[i].no, fin[i].finrank, fin[i].local, fin[i].localrank);
}

return 0;
}

2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85

9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4

题目要求:The locations are numbered from 1 to N. The output must be sorted in nondecreasing order of the final ranks. The testees with the same score must have the same rank, and the output must be sorted in nondecreasing order of their registration numbers.

也就是说,学生的排名和学号都是非递减。那么排名优先是按照分数高在前,低在后。
因此用return a.score != b.score ? a.score > b.score : a.no < b.no;也就说,分数不同时,分数高优先,分数相同时,学号小优先。

1027 Colors in Mars (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;

int main() {
char c[14] = {"0123456789ABC"};
printf("#");
for (int i = 0; i < 3; i++) {
int num;
scanf("%d", &num);
printf("%c%c", c[num / 13], c[num % 13]);
}

return 0;
}

15 43 71
#123456

// 2位的13进制最多可以表示169个数(13*13)从0到168(CC)

1028 List Sorting (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;

const int maxn = 100001;

struct student {
int no, score;
char name[10];
};

student s[maxn];

int c;
bool cmp(student a, student b) {
if (c == 1) {
return a.no < b.no;
} else if (c == 2) {
if (strcmp(a.name, b.name) == 0) return a.no < b.no;
return strcmp(a.name, b.name) <= 0;
} else {
if (a.score == b.score) return a.no < b.no;
return a.score <= b.score;
}
}

int main() {
int n;
scanf("%d%d", &n, &c);
for (int i = 0; i < n; i++) {
scanf("%d %s %d", &s[i].no, &s[i].name, &s[i].score);
}
sort(s, s + n, cmp);
for (int i = 0; i < n; i++) {
printf("%06d %s %d\n", s[i].no, s[i].name, s[i].score);
}

return 0;
}

4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90

1029 Median (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;

const int maxn = 200001;
int num[maxn];

int main() {
int n, m, t, cnt = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
scanf("%d", &num[i]);
}
num[n + 1] = INT32_MAX;
cin >> m;
int midpos = (n + m + 1) / 2, i = 1;
for (int j = 1; j <= m; j++) {
scanf("%d", &t);
while (num[i] < t) {
cnt++;
if (cnt == midpos) cout << num[i];
i++;
}
cnt++;
if (cnt == midpos) cout << t;
}
while (i <= n) {
cnt++;
if (cnt == midpos) cout << num[i];
i++;
}

return 0;
}

4 11 12 13 14
5 9 10 15 16 17

13

1031 Hello World for U (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string.h>
using namespace std;

char c[81], u[29][29];

int main() {
memset(u, ' ', sizeof(u));
scanf("%s", c);
int len = strlen(c) + 2;
int n1 = len / 3, n2 = len / 3 + len % 3, index = 0;
for (int i = 0; i < n1; i++) u[i][0] = c[index++];
for (int i = 1; i <= n2 - 1; i++) u[n1 - 1][i] = c[index++];
for (int i = n1 - 2; i >= 0; i--) u[i][n2 - 1] = c[index++];
for (int i = 0; i < n1; i++) {
for (int j = 0; j < n2; j++) {
printf("%c", u[i][j]);
}
printf("\n");
}

return 0;
}

helloworld!
h !
e d
l l
lowor

1032 Sharing (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <cstdio>
using namespace std;
struct NODE {
char key;
int next;
bool flag;
}node[100000];
int main() {
int s1, s2, n, a, b;
scanf("%d%d%d", &s1, &s2, &n);
char data;
for(int i = 0; i < n; i++) {
scanf("%d %c %d", &a, &data, &b);
node[a] = {data, b, false};
}
for(int i = s1; i != -1; i = node[i].next)
node[i].flag = true;
for(int i = s2; i != -1; i = node[i].next) {
if(node[i].flag == true) {
printf("%05d", i);
return 0;
}
}
printf("-1");
return 0;
}

❌ 1033 To Fill or Not to Fill (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;

const int INF = 99999999;

struct station {
double price, distance;
};

bool cmp(station a, station b) {
return a.distance < b.distance;
}

int main() {
double cmax, d, davg;
int n;
scanf("%lf %lf %lf %d", &cmax, &d, &davg, &n);
vector<station> sta(n + 1);
sta[0].price = 0.0, sta[0].distance = d;
// sta[0] = {0.0, d};
for (int i = 1; i <= n; i++) {
scanf("%lf %lf", &sta[i].price, &sta[i].distance);
}
sort(sta.begin(), sta.end(), cmp);
double nowdis = 0.0, maxdis = 0.0, nowprice = 0.0, totalPrice = 0.0, leftdis = 0.0;
if (sta[0].distance != 0.0) {
printf("The maximum travel distance = 0.00");
return 0;
} else {
nowprice = sta[0].price;
}
while (nowdis < d) {
maxdis = nowdis + cmax * davg;
double minPriceDis = 0, minPrice = INF;
int flag = 0;
for (int i = 1; i <= n && sta[i].distance <= maxdis; i++) {
if (sta[i].distance <= nowdis) continue;
if (sta[i].price < nowprice) {
totalPrice += (sta[i].distance - nowdis - leftdis) * nowprice / davg;
leftdis = 0.0;
nowprice = sta[i].price;
nowdis = sta[i].distance;
flag = 1;
break;
}
if (sta[i].price < minPrice) {
minPrice = sta[i].price;
minPriceDis = sta[i].distance;
}
}
if (flag == 0 && minPrice != INF) {
totalPrice += (nowprice * (cmax - leftdis / davg));
leftdis = cmax * davg - (minPriceDis - nowdis);
nowprice = minPrice;
nowdis = minPriceDis;
}
if (flag == 0 && minPrice == INF) {
nowdis += cmax * davg;
printf("The maximum travel distance = %.2f", nowdis);
return 0;
}
}
printf("%.2f", totalPrice);

return 0;
}

50 1300 12 8
6.00 1250
7.00 600
7.00 150
7.10 0
7.20 200
7.50 400
7.30 1000
6.85 300

749.17

​​

1035 Password (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <vector>
using namespace std;

int main() {
int n;
scanf("%d", &n);
vector<string> res;
for (int i = 0; i < n; i++) {
string name, s;
cin >> name >> s;
int len = s.length(), flag = 0;
for (int j = 0; j < len; j++) {
if (s[j] == '1') {
s[j] = '@';
flag = 1;
} else if (s[j] == '0') {
s[j] = '%';
flag = 1;
} else if (s[j] == 'l') {
s[j] = 'L';
flag = 1;
} else if (s[j] == 'O') {
s[j] = 'o';
flag = 1;
} else {
continue;
}
}
if (flag) {
string t = name + " " + s;
res.push_back(t);
}
}
int cnt = res.size();
if (cnt) {
printf("%d\n", cnt);
for (int i = 0; i < cnt; i++) {
cout << res[i] << endl;
}
} else if (n == 1) {
printf("There is 1 account and no account is modified");
} else {
printf("There are %d accounts and no account is modified", n);
}

return 0;
}

3
Team000002 Rlsp0dfa
Team000003 perfectpwd
Team000001 R1spOdfa

2
Team000002 RLsp%dfa
Team000001 R@spodfa

# 1036 Boys vs Girls (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
using namespace std;

int main() {
int n;
scanf("%d", &n);
string female, male;
int femalescore = -1, malescore = 101;
for (int i = 1; i <= n; i++) {
string name, sex, num;
int score;
cin >> name >> sex >> num;
scanf("%d", &score);
if (sex == "F") {
if (femalescore < score) {
femalescore = score;
female = name + " " + num;
}
} else if (malescore > score) {
malescore = score;
male = name + " " + num;
}
}
if (femalescore != -1) {
cout << female << endl;
} else {
printf("Absent\n");
}
if (malescore != 101) {
cout << male << endl;
} else {
printf("Absent\n");
}
if (femalescore != -1 && malescore != 101) {
printf("%d", femalescore - malescore);
} else {
printf("NA");
}

return 0;
}

3
Joe M Math990112 89
Mike M CS991301 100
Mary F EE990830 95

Mary EE990830
Joe Math990112
6

1037 Magic Coupon (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
int len1, len2, ans = 0, p = 0, q = 0;
scanf("%d", &len1);
vector<int> v1(len1);
for (int i = 0; i < len1; i++) {
scanf("%d", &v1[i]);
}
scanf("%d", &len2);
vector<int> v2(len2);
for (int i = 0; i < len2; i++) {
scanf("%d", &v2[i]);
}
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
while (p < len1 && q < len2 && v1[p] < 0 && v2[q] < 0) {
ans += v1[p] * v2[q];
p++; q++;
}
p = len1 - 1, q = len2 - 1;
while (p >= 0 && q >= 0 && v1[p] > 0 && v2[q] > 0) {
ans += v1[p] * v2[q];
p--; q--;
}
printf("%d", ans);

return 0;
}

4
1 2 4 -1
4
7 6 -2 -3

43

1039 Course List for Student (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int getid(char *name) {
int id = 0;
for(int i = 0; i < 3; i++)
id = 26 * id + (name[i] - 'A');
id = id * 10 + (name[3] - '0');
return id;
}
const int maxn = 26 * 26 * 26 * 10 + 10;
vector<int> v[maxn];

int main() {
int n, k, no, num, id = 0;
char name[5];
scanf("%d %d", &n, &k);
for(int i = 0; i < k; i++) {
scanf("%d %d", &no, &num);
for(int j = 0; j < num; j++) {
scanf("%s", name);
id = getid(name);
v[id].push_back(no);
}
}
for(int i = 0; i < n; i++) {
scanf("%s", name);
id = getid(name);
sort(v[id].begin(), v[id].end());
printf("%s %lu", name, v[id].size());
for(int j = 0; j < v[id].size(); j++)
printf(" %d", v[id][j]);
printf("\n");
}
return 0;
}

❌⭕ 1040 Longest Symmetric String (25 分) 对递推方程还是有疑虑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <algorithm>
using namespace std;

int dp[1010][1010];

int main() {
string s;
getline(cin, s);
int len = s.length(), ans = 1;
for (int i = 0; i < len; i++) {
dp[i][i] = 1;
if (i < len - 1 && s[i] == s[i + 1]) {
dp[i][i + 1] = 1;
ans = 2;
}
}
for (int l = 3; l <= len; l++) {
for (int i = 0; i + l - 1 < len; i++) {
int j = i + l - 1;
if (s[i] == s[j] && dp[i + 1][j - 1] == 1) {
dp[i][j] = 1;
ans = l;
}
}
}
printf("%d", ans);

return 0;
}

Is PAT&TAP symmetric?

11

1041 Be Unique (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;

int num[100001], cnt[100001];

int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &num[i]);
cnt[num[i]]++;
}
for (int i = 0; i < n; i++) {
if (cnt[num[i]] == 1) {
printf("%d", num[i]);
return 0;
}
}
printf("None");

return 0;
}

7 5 31 5 88 67 88 17
31

1042 Shuffling Machine (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;

int main() {
int cnt;
scanf("%d", &cnt);
int start[55], end[55], order[55];
for (int i = 1; i < 55; i++) {
scanf("%d", &order[i]);
end[i] = i;
}
for (int i = 0; i < cnt; i++) {
for (int j = 1; j < 55; j++) {
start[j] = end[j];
}
for (int j = 1; j < 55; j++) {
end[order[j]] = start[j];
}
}
char c[6] = {"SHCDJ"};
for (int i = 1; i < 55; i++) {
end[i] = end[i] - 1;
printf("%c%d", c[end[i] / 13], end[i] % 13 +1);
if (i != 54) printf(" ");
}

return 0;
}

❌ 1043 Is It a Binary Search Tree (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <cstdio>
#include <vector>
using namespace std;
bool isMirror;
vector<int> pre, post;
void getpost(int root, int tail) {
if(root > tail) return ;
int i = root + 1, j = tail;
if(!isMirror) {
while(i <= tail && pre[root] > pre[i]) i++;
while(j > root && pre[root] <= pre[j]) j--;
} else {
while(i <= tail && pre[root] <= pre[i]) i++;
while(j > root && pre[root] > pre[j]) j--;
}
if(i - j != 1) return ;
getpost(root + 1, j);
getpost(i, tail);
post.push_back(pre[root]);
}
int main() {
int n;
scanf("%d", &n);
pre.resize(n);
for(int i = 0; i < n; i++)
scanf("%d", &pre[i]);
getpost(0, n - 1);
if(post.size() != n) {
isMirror = true;
post.clear();
getpost(0, n - 1);
}
if(post.size() == n) {
printf("YES\n%d", post[0]);
for(int i = 1; i < n; i++)
printf(" %d", post[i]);
} else {
printf("NO");
}
return 0;
}

1044 Shopping in Mars (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <vector>
using namespace std;
vector<int> sum, resultArr;
int n, m;
void Func(int i, int &j, int &tempsum) {
int left = i, right = n;
while(left < right) {
int mid = (left + right) / 2;
if(sum[mid] - sum[i-1] >= m)
right = mid;
else
left = mid + 1;
}
j = right;
tempsum = sum[j] - sum[i-1];
}
int main() {
scanf("%d%d", &n, &m);
sum.resize(n+1);
for(int i = 1; i <= n; i++) {
scanf("%d", &sum[i]);
sum[i] += sum[i-1];
}
int minans = sum[n];
for(int i = 1; i <= n; i++) {
int j, tempsum;
Func(i, j, tempsum);
if(tempsum > minans) continue;
if(tempsum >= m) {
if(tempsum < minans) {
resultArr.clear();
minans = tempsum;
}
resultArr.push_back(i);
resultArr.push_back(j);
}
}
for(int i = 0; i < resultArr.size(); i += 2)
printf("%d-%d\n", resultArr[i], resultArr[i+1]);
return 0;
}

1046 Shortest Distance (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
using namespace std;

int main() {
int n;
scanf("%d", &n);
int dis[n + 2] = {0};
int sum = 0, left, right, cnt;
for (int i = 1; i <= n; i++) {
int t;
scanf("%d", &t);
sum += t;
dis[i + 1] = sum;
} // dis[i]表示i点的绝对距离,dis[1] = 0,dis[n+1]意思是走一圈的距离
scanf("%d", &cnt);
for (int i = 0; i < cnt; i++) {
scanf("%d %d", &left, &right);
if (left > right) { swap(left, right); }
int t = dis[right] - dis[left];
printf("%d\n", min(t, dis[n + 1] - t));
}

return 0;
}

5 1 2 4 14 9
3
1 3
2 5
4 1

3
10
7

// 也可以用
for(int i = 1; i <= n; i++) {
int temp;
scanf("%d", &temp);
sum += temp;
dis[i] = sum;
}
// 表示的是从第一个点到i下一个点的距离
// 所以dis[n]是从第一点到n点再毁1点的距离(即总长)
// 两点距离得用int temp = dis[right - 1] - dis[left - 1];来表示。
// 比如2 6,temp = dis[2-1]-dis[6-1],
// 因为dis[1]表示从1点到2点的距离,dis[5]表示从1点到6点的距离

1048 Find Coins (25 分)

1
2


1050 String Subtraction (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string.h>
using namespace std;

char s1[10001], s2[10001];
int main() {
cin.getline(s1, 10001);
cin.getline(s2, 10001);
int len1 = strlen(s1);
int len2 = strlen(s2);
bool ASCII[300] = {false};
for (int i = 0; i< len2; i++) {
ASCII[s2[i]] = true;
}
for (int i = 0; i < len1; i++) {
if (ASCII[s1[i]] == false) {
printf("%c", s1[i]);
}
}

return 0;
}

// 因为输入会有空格,所以用cin.getline()来读取一行,用scanf遇到空格会停止

They are students.
aeiou

Thy r stdnts.

1051 Pop Sequence (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;

int main() {
int m, n, k;
scanf("%d %d %d", &m, &n, &k);
for (int i = 0; i < k; i++) {
bool flag = false;
stack<int> s;
vector<int> v(n + 1);
for (int j = 1; j <= n; j++) {
scanf("%d", &v[j]);
}
int cur = 1;
for (int j = 1; j <= n; j++) {
s.push(j);
if (s.size() > m) break;
while (!s.empty() && s.top() == v[cur]) {
s.pop();
cur++;
}
}
if (cur == n + 1) flag = true;
if (flag) printf("YES\n");
else printf("NO\n");
}

return 0;
}

5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2

YES
NO
NO
YES
NO

1054 The Dominant Color (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <map>
using namespace std;

int main() {
int m, n;
scanf("%d %d", &m, &n);
map<int, int> pixel;
int half = n * m / 2;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int t;
scanf("%d", &t);
pixel[t]++;
if (pixel[t] > half) {
printf("%d", t);
return 0;
}
}
}

return 0;
}

5 3
0 0 255 16777215 24
24 24 0 0 24
24 0 24 24 24

24

1055 The World’s Richest (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;

struct rich {
char name[10];
int age, money;
};

int cmp(rich a, rich b) {
if (a.money != b.money) {
return a.money > b.money;
} else if (a.age != b.age) {
return a.age < b.age;
} else {
return (strcmp(a.name, b.name) < 0);
}
}

int main() {
int n, k, num, amin, amax;
scanf("%d %d", &n, &k);
vector<rich> vt(n), v;
vector<int> book(205, 0);
for (int i = 0; i < n; i++) {
scanf("%s %d %d", vt[i].name, &vt[i].age, &vt[i].money);
}
sort(vt.begin(), vt.end(), cmp);
for (int i = 0; i < n; i++) {
if (book[vt[i].age] < 100) {
v.push_back(vt[i]);
book[vt[i].age]++;
}
}
for (int i = 0; i < k; i++) {
scanf("%d %d %d", &num, &amin, &amax);
vector<rich> t;
for (int j = 0; j < v.size(); j++) {
if (v[j].age >= amin && v[j].age <= amax) {
t.push_back(v[j]);
}
}
if (i != 0) printf("\n");
printf("Case #%d:", i + 1);
int flag = 0;
for (int j = 0; j < num && j <t.size(); j++) {
printf("\n%s %d %d", t[j].name, t[j].age, t[j].money);
flag = 1;
}
if (flag == 0) printf("\nNone");
}

return 0;

}

12 4
Zoe_Bill 35 2333
Bob_Volk 24 5888
Anny_Cin 95 999999
Williams 30 -22
Cindy 76 76000
Alice 18 88888
Joe_Mike 32 3222
Michael 5 300000
Rosemary 40 5888
Dobby 24 5888
Billy 24 5888
Nobody 5 0
4 15 45
4 30 35
4 5 95
1 45 50

Case #1:
Alice 18 88888
Billy 24 5888
Bob_Volk 24 5888
Dobby 24 5888
Case #2:
Joe_Mike 32 3222
Zoe_Bill 35 2333
Williams 30 -22
Case #3:
Anny_Cin 95 999999
Michael 5 300000
Alice 18 88888
Cindy 76 76000
Case #4:
None

1056 Mice and Rice (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
int weight, index, rank, index0;
};
bool cmp1(node a, node b) {
return a.index0 < b.index0;
}
int main() {
int n, g, num;
scanf("%d%d", &n, &g);
vector<int> v(n);
vector<node> w(n);
for(int i = 0; i < n; i++)
scanf("%d", &v[i]);
for(int i = 0; i < n; i++) {
scanf("%d", &num);
w[i].weight = v[num];
w[i].index = i;
w[i].index0 = num;
}
queue<node> q;
for(int i = 0; i < n; i++)
q.push(w[i]);
while(!q.empty()) {
int size = q.size();
if(size == 1) {
node temp = q.front();
w[temp.index].rank = 1;
break;
}
int group = size / g;
if(size % g != 0)
group += 1;
node maxnode;
int maxn = -1, cnt = 0;
for(int i = 0; i < size; i++) {
node temp = q.front();
w[temp.index].rank = group + 1;
q.pop();
cnt++;
if(temp.weight > maxn) {
maxn = temp.weight;
maxnode = temp;
}
if(cnt == g || i == size - 1) {
cnt = 0;
maxn = -1;
q.push(maxnode);
}
}
}
sort(w.begin(), w.end(), cmp1);
for(int i = 0; i < n; i++) {
if(i != 0) printf(" ");
printf("%d", w[i].rank);
}
return 0;
}

1058 A+B in Hogwarts (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;

int main() {
long long a, b, c, d, e, f;
scanf("%lld.%lld.%lld %lld.%lld.%lld", &a, &b, &c, &d, &e, &f);
long long sum = c + b * 29 + a * 17 * 29 + f + e * 29 + d * 17 * 29;
long long g = sum / (17 * 29);
sum = sum % (17 * 29);
printf("%lld.%lld.%lld", g, sum / 29, sum % 29);

return 0;
}

3.2.1 10.16.27
14.1.28

1059 Prime Factors (25 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> prime(50000, 1);

int main() {
for (int i = 2; i * i < 50000; i++) {
for (int j = 2; j * i < 50000; j++) {
prime[i * j] = 0;
}
}
long int num;
scanf("%ld", &num);
printf("%ld=", num);
if (num == 1) printf("1");
bool state = false;
for (int i = 2; i < 50000 && num >= 2; i++) {
int cnt = 0, flag = 0;
while (prime[i] == 1 && num % i == 0) {
cnt++;
num /= i;
flag = 1;
}
if (flag) {
if (state) printf("*");
printf("%d", i);
state = true;
}
if (cnt >= 2) printf("^%d", cnt);
}
if (num > 1) printf("%s%ld", state ? "*" : "", num);

return 0;
}


97532468

97532468=2^2*11*17*101*1291

输出十万内的素数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <stack>
using namespace std;

vector<int> prime(100000, 1);

int main() {
#ifdef ONLINE_JUDGE
#else
// freopen("1.txt", "r", stdin);
freopen("out.txt","w",stdout);
#endif

for (int i = 2; i * i < 100000; i++) {
for (int j = 2; j * i < 100000; j++) {
prime[i * j] = 0;
}
}
printf("2");
for (int i = 3; i < 100000; i++) {
if (prime[i]) printf(" %d", i);
}

return 0;
}

5万以后的素质:

49939 49943 49957 49991 49993 49999 50021 50023 50033 50047 50051 50053 50069 50077 50087 50093 50101 50111 50119 50123 50129 50131 50147 50153 50159 50177 50207 50221 50227 50231 50261 50263 50273 50287 50291 50311 50321 50329 50333 50341 50359 50363 50377 50383 50387 50411 50417 50423 50441 50459 50461 50497 50503 50513 50527 50539 50543 50549 50551 50581 50587 50591 50593 50599 50627 50647 50651 50671 50683 50707 50723 50741 50753 50767 50773 50777 50789 50821 50833 50839 50849 50857 50867 50873 50891 50893 50909 50923 50929 50951 50957 50969 50971 50989 50993 51001 51031 51043 51047 51059 51061 51071 51109 51131 51133 51137 51151 51157 51169 51193 51197 51199 51203 51217 51229 51239 51241 51257 51263 51283 51287 51307 51329 51341 51343 51347 51349 51361 51383 51407 51413 51419 51421 51427 51431 51437 51439 51449 51461 51473 51479 51481 51487 51503 51511 51517 51521 51539 51551 51563 51577 51581 51593

sqrt(1.0 * INT32_MAX)的值。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cmath>
using namespace std;

int main() {
int res = sqrt(1.0 * INT32_MAX);
printf("%d", res);

return 0;
}

46340

会出现重复情况吗?会的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cmath>
using namespace std;

vector<int> prime(100000, 1);

int main() {
#ifdef ONLINE_JUDGE
#else
// freopen("1.txt", "r", stdin);
freopen("out.txt","w",stdout);
#endif

int cnt = 0;
for (int i = 2; i * i < 100; i++) {
for (int j = 2; j * i < 100; j++) {
prime[i * j] = 0;
printf("%2d %2d %3d ", i, j, i * j);
cnt++;
if (cnt % 5 == 0) printf("\n");
}
}
printf("\n");
printf("cnt = %d\n\n", cnt);
printf("2");
for (int i = 3; i < 100; i++) {
if (prime[i]) printf(" %d", i);
}

return 0;
}

2 2 4 2 3 6 2 4 8 2 5 10 2 6 12
2 7 14 2 8 16 2 9 18 2 10 20 2 11 22
2 12 24 2 13 26 2 14 28 2 15 30 2 16 32
2 17 34 2 18 36 2 19 38 2 20 40 2 21 42
2 22 44 2 23 46 2 24 48 2 25 50 2 26 52
2 27 54 2 28 56 2 29 58 2 30 60 2 31 62
2 32 64 2 33 66 2 34 68 2 35 70 2 36 72
2 37 74 2 38 76 2 39 78 2 40 80 2 41 82
2 42 84 2 43 86 2 44 88 2 45 90 2 46 92
2 47 94 2 48 96 2 49 98 3 2 6 3 3 9
3 4 12 3 5 15 3 6 18 3 7 21 3 8 24
3 9 27 3 10 30 3 11 33 3 12 36 3 13 39
3 14 42 3 15 45 3 16 48 3 17 51 3 18 54
3 19 57 3 20 60 3 21 63 3 22 66 3 23 69
3 24 72 3 25 75 3 26 78 3 27 81 3 28 84
3 29 87 3 30 90 3 31 93 3 32 96 3 33 99
4 2 8 4 3 12 4 4 16 4 5 20 4 6 24
4 7 28 4 8 32 4 9 36 4 10 40 4 11 44
4 12 48 4 13 52 4 14 56 4 15 60 4 16 64
4 17 68 4 18 72 4 19 76 4 20 80 4 21 84
4 22 88 4 23 92 4 24 96 5 2 10 5 3 15
5 4 20 5 5 25 5 6 30 5 7 35 5 8 40
5 9 45 5 10 50 5 11 55 5 12 60 5 13 65
5 14 70 5 15 75 5 16 80 5 17 85 5 18 90
5 19 95 6 2 12 6 3 18 6 4 24 6 5 30
6 6 36 6 7 42 6 8 48 6 9 54 6 10 60
6 11 66 6 12 72 6 13 78 6 14 84 6 15 90
6 16 96 7 2 14 7 3 21 7 4 28 7 5 35
7 6 42 7 7 49 7 8 56 7 9 63 7 10 70
7 11 77 7 12 84 7 13 91 7 14 98 8 2 16
8 3 24 8 4 32 8 5 40 8 6 48 8 7 56
8 8 64 8 9 72 8 10 80 8 11 88 8 12 96
9 2 18 9 3 27 9 4 36 9 5 45 9 6 54
9 7 63 9 8 72 9 9 81 9 10 90 9 11 99

cnt = 170

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

PS:

打印素数的几种方法及其优化

https://blog.csdn.net/aixiaodeshushu/article/details/81429285

1060 Are They Equal (25 分)

1
2


1061 Dating (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;

int main() {
string a, b, c, d;
cin >> a >> b >> c >> d;
char t[2];
int pos, i = 0, j = 0;
while (i < a.length() && i < b.length()) {
if (a[i] == b[i] && (a[i] >= 'A' && a[i] <= 'G')) {
t[0] = a[i];
break;
}
i++;
}
i = i + 1;
while (i < a.length() && i < b.length()) {
if (a[i] == b[i] && ((a[i] >= 'A' && a[i] <= 'N') || isdigit(a[i]))) {
t[1] = a[i];
break;
}
i++;
}
while (j < c.length() && j < d.length()) {
if (c[j] == d[j] && isalpha(c[j])) {
pos = j;
break;
}
j++;
}
string week[7] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
int m = isdigit(t[1]) ? t[1] - '0' : t[1] - 'A' + 10;
cout << week[t[0] - 'A'] << " ";
printf("%02d:%02d", m, pos);
return 0;
}

3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm

THU 14:04

1065 A+B and C (64bit) (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;

int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
long long a, b, c;
scanf("%lld %lld %lld", &a, &b, &c);
long long sum = a + b;
if (a > 0 && b > 0 && sum < 0) {
printf("Case #%d: true\n", i + 1);
} else if (a < 0 && b < 0 && sum >= 0) {
printf("Case #%d: false\n", i + 1);
} else if (sum > c) {
printf("Case #%d: true\n", i + 1);
} else {
printf("Case #%d: false\n", i + 1);
}
}

return 0;
}

3
1 2 3
2 3 4
9223372036854775807 -9223372036854775808 0

Case #1: false
Case #2: true
Case #3: false

1069 The Black Hole of Numbers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

bool cmp(int a, int b) {
return a > b;
}

void to_array(int n, int num[]) {
for (int i = 0; i < 4; i++) {
num[i] = n % 10;
n /= 10;
}
}

int to_num(int num[]) {
int sum = 0;
for (int i = 0; i < 4; i++) {
sum = sum * 10 + num[i];
}
return sum;
}

int main() {
int n, MIN, MAX;
scanf("%d", &n);
int num[5];
for (; ;) { // 也可以用while (1)
to_array(n, num);
sort(num, num + 4);
MIN = to_num(num);
sort(num, num + 4, cmp);
MAX = to_num(num);
n = MAX - MIN;
printf("%04d - %04d = %04d\n", MAX, MIN, n);
if (n == 0 || n == 6174) break;
}

return 0;
}

6767

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174

1073 Scientific Notation (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
int i = 0;
while (s[i] != 'E') i++;
string t = s.substr(1, i-1);
int n = stoi(s.substr(i+1));
if (s[0] == '-') cout << "-";
if (n < 0) {
cout << "0.";
for (int j = 0; j < abs(n) - 1; j++) cout << '0';
for (int j = 0; j < t.length(); j++)
if (t[j] != '.') cout << t[j];
} else {
cout << t[0];
int cnt, j;
for (j = 2, cnt = 0; j < t.length() && cnt < n; j++, cnt++) cout << t[j];
if (j == t.length()) {
for (int k = 0; k < n - cnt; k++) cout << '0';
} else {
cout << '.';
for (int k = j; k < t.length(); k++) cout << t[k];
}
}
return 0;
}

1077 Kuchiguse (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
int n;
scanf("%d\n", &n);
string ans;
for(int i = 0; i < n; i++) {
string s;
getline(cin ,s);
int lens = s.length();
reverse(s.begin(), s.end());
if (i == 0) {
ans = s;
continue;
} else {
int lenans = ans.length();
if (lenans > lens) swap(ans, s);
int minlen = min(lens, lenans);
for (int j = 0; j < minlen; j++) {
if (ans[j] != s[j]) {
ans = ans.substr(0, j);
break;
}
}
}
}
reverse(ans.begin(), ans.end());
if (ans.length() == 0) printf("nai");
cout << ans;

return 0;
}

// scanf“%d”少了个\n出错

3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~

nyan~

1078 Hashing (25 分)

1
2


1081 Rational Sum (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;

long long gcd(long long a, long long b) {
return b == 0 ? abs(a) : gcd(b, a % b);
}

int main() {
long long n, a, b, suma = 0, sumb = 1, gcdval;
scanf("%lld\n", &n);
for (int i = 0; i < n; i++) {
scanf("%lld/%lld", &a, &b);
gcdval = gcd(a, b);
a = a / gcdval;
b = b / gcdval;
suma = suma * b + sumb * a;
sumb = sumb * b;
gcdval = gcd(suma, sumb);
suma = suma / gcdval;
sumb = sumb / gcdval;
}
long long integer = suma / sumb;
suma = suma - (sumb * integer);
if (integer != 0) {
printf("%lld", integer);
if (suma != 0) printf(" ");
}
if (suma != 0) {
printf("%lld/%lld", suma, sumb);
}
if (integer == 0 && suma == 0) {
printf("0");
}

return 0;
}


3
1/3 -1/6 1/8

1084 Broken Keyboard (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;

int main() {
string s1, s2, res;
cin >> s1 >> s2;
for (int i = 0; i< s1.length(); i++) {
if (s2.find(s1[i]) == string::npos && res.find(toupper(s1[i])) == string::npos) {
res += toupper(s1[i]);
}
}
cout << res;

return 0;
}

7_This_is_a_test
_hs_s_a_es

7TI

1088 Rational Arithmetic (20 分) !!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <cmath>
using namespace std;

long long a, b, c, d;

long long gcd(long long a, long long b) {
return !b ? abs(a) : gcd(b, a % b);
}

void f(long long m, long long n) {
if (m == 0 | n == 0) {
printf("%s", n == 0 ? "Inf" : "0");
return;
}
bool flag = (m < 0 && n > 0) || (m > 0 && n < 0);
m = abs(m), n = abs(n);
long long x = m / n;
printf("%s", flag ? "(-" : "");
if (x != 0) printf("%lld", x);
if (m % n == 0) {
if (flag) printf(")");
return;
}
if (x != 0) printf(" ");
m = m - x * n;
long long gcdval = gcd(m, n);
m = m / gcdval, n = n / gcdval;
printf("%lld/%lld%s", m, n, flag ? ")" : "");
}

int main() {
scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);
f(a, b);
printf(" + ");
f(c, d);
printf(" = ");
f(a * d + b * c, b * d);
printf("\n");

f(a, b);
printf(" - ");
f(c, d);
printf(" = ");
f(a * d - b * c, b * d);
printf("\n");

f(a, b);
printf(" * ");
f(c, d);
printf(" = ");
f(a * c, b * d);
printf("\n");

f(a, b);
printf(" / ");
f(c, d);
printf(" = ");
f(a * d, b * c);
printf("\n");

return 0;
}

2/3 -4/2

2/3 + (-2) = (-1 1/3)
2/3 - (-2) = 2 2/3
2/3 * (-2) = (-1 1/3)
2/3 / (-2) = (-1/3)

1092 To Buy or Not to Buy (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;

int book[300];

int main() {
string a, b;
cin >> a >> b;
for (int i = 0; i < a.length(); i++) {
book[a[i]]++;
}
int res = 0;
for (int i = 0; i < b.length(); i++) {
if (book[b[i]] > 0) {
book[b[i]]--;
}
else {
res++;
}
}
if (res == 0) {
printf("Yes %d", a.length() - b.length());
}
else {
printf("No %d", res);
}

return 0;
}

ppRYYGrrYB225
YrR8RrY

No 2

1096 Consecutive Factors (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <cmath>
using namespace std;

int num, temp;

int main() {
cin >> num;
int begin = 0, len = 0, maxn = sqrt(num) + 1;
for (int i = 2; i <= maxn; i++) {
int j;
temp = 1;
for (j = i; j <= maxn; j++) {
temp *= j;
if (num % temp != 0) break;
}
if (j - i > len) {
len = j - i;
begin = i;
}
}
if (begin == 0) {
cout << 1 << endl << num;
} else {
cout << len << endl;
for (int i = 0; i < len; i++) {
cout << begin + i;
if (i != len - 1) cout << '*';
}
}

return 0;
}

630

3
5*6*7

1100 Mars Numbers (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <string>
using namespace std;

string a[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string b[13] = {"####", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
string s;
int len;

void toMars(int n) {
if (n / 13) cout << b[n / 13];
if ((n / 13) && (n % 13)) cout << " ";
if (n % 13 || n == 0) cout << a[n % 13];
}

void toEarth() {
int t1 = 0, t2 = 0;
string s1 = s.substr(0, 3), s2;
if (len > 4) s2 = s.substr(4, 3);
for (int i = 0; i <= 12; i++) {
if (s1 == a[i] || s2 == a[i]) t2 = i;
if (s1 == b[i]) t1 = i;
}
cout << t1 * 13 + t2;
}

int main() {
int n;
cin >> n;
getchar(); // 用来接收回车的。
for (int i = 0; i < n; i++) {
getline(cin, s);
len = s.length();
if (s[0] >= '0' && s[0] <= '9') {
toMars(stoi(s));
} else {
toEarth();
}
cout << endl;
}

return 0;
}

4
29
5
elo nov
tam

hel mar
may
115
13

1104 Sum of Number Segments (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;

int main() {
int n;
cin >> n;
double sum = 0.0, t;
for (int i = 1; i <= n; i++) {
cin >> t;
sum = sum + (t * i * (n - (i - 1)));
}
printf("%.2f", sum);

return 0;
}


4
0.1 0.2 0.3 0.4

5.00

1108 Finding Average (20 分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string.h>
using namespace std;

int main() {
int n, cnt = 0;
char a[60], b[60];
double sum = 0.0, t;
cin >> n;
for (int i = 0; i < n; i++) {
scanf("%s", a);
sscanf(a, "%lf", &t);
sprintf(b, "%.2f", t);
int flag = 0;
for (int j = 0; j < strlen(a); j++) {
if (a[j] != b[j]) flag = 1;
}
if (flag || t < -1000 || t > 1000) {
printf("ERROR: %s is not a legal number\n", a);
continue;
} else {
sum += t;
cnt++;
// printf("a = %s, b = %s.\n", a, b);
// a也可能比b短,比如输入5,a = 5, b = 5.00
// 所以用j < strlen(a)
}
}
if (cnt == 1) {
printf("The average of 1 number is %.2f", sum);
} else if (cnt > 1) {
printf("The average of %d numbers is %.2f", cnt, sum / cnt);
} else {
printf("The average of 0 numbers is Undefined");
}

return 0;
}