Skip to content

Commit 4e2aef3

Browse files
committed
2448
1 parent c3ab542 commit 4e2aef3

File tree

3 files changed

+121
-72
lines changed

3 files changed

+121
-72
lines changed

2250.cpp

+60-8
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,80 @@
11
#include <stdio.h>
22
#include <vector>
3+
#include <queue>
4+
35
using namespace std;
4-
vector<int> v;
6+
int pos[10001];
57
int node[10001][2];
8+
int cnt;
9+
int root;
10+
int check[10001];
11+
queue<pair<int, int> > q;
612
void preOrder(int num) {
7-
if(node[num][0]!=-1){
13+
if (node[num][0] != -1) {
814
preOrder(node[num][0]);
915
}
10-
v.push_back(num);
16+
pos[num] = ++cnt;
1117
if (node[num][1] != -1) {
1218
preOrder(node[num][1]);
1319
}
1420
}
1521

1622

1723
int main() {
18-
int num,tmp;
24+
int num, tmp;
1925
scanf("%d ", &num);
2026
for (int i = 0; i < num; i++) {
2127
scanf("%d", &tmp);
22-
scanf("%d %d", node[tmp][0], &node[tmp][1]);
28+
scanf("%d %d", &node[tmp][0], &node[tmp][1]);
29+
if (node[tmp][1] != -1) {
30+
check[node[tmp][1]]++;
31+
}
32+
if (node[tmp][0] != -1) {
33+
check[node[tmp][0]]++;
34+
}
35+
}
36+
37+
for (int i = 1; i <= num; i++) {
38+
if (check[i] == 0) {
39+
root = i;
40+
break;
41+
}
42+
}
43+
preOrder(root);
44+
q.push(make_pair(root, 1));
45+
int level = 1;
46+
int start = 1, end = 1;
47+
int Max = 0, Maxlevel = 0;
48+
while (!q.empty()) {
49+
50+
if (node[q.front().first][0] != -1) {
51+
q.push(make_pair(node[q.front().first][0], q.front().second + 1));
52+
}
53+
if (node[q.front().first][1] != -1) {
54+
q.push(make_pair(node[q.front().first][1], q.front().second + 1));
55+
}
56+
57+
if (level != q.front().second) {
58+
int mid = pos[end] - pos[start] + 1;
59+
/*printf("%d:%d\n", level, mid);*/
60+
if (Max < mid) {
61+
Max = mid;
62+
Maxlevel = level;
63+
}
64+
start = q.front().first;
65+
end = q.front().second;
66+
level++;
67+
}
68+
else {
69+
end = q.front().first;
70+
}
71+
q.pop();
2372
}
24-
preOrder(1);
25-
for (int i = 0; i < v.size(); i++) {
26-
printf("%d ", v[i]);
73+
int mid = pos[end] - pos[start] + 1;
74+
/*printf("%d:%d\n", level, mid);*/
75+
if (Max < mid) {
76+
Max = mid;
77+
Maxlevel = level;
2778
}
79+
printf("%d %d", Maxlevel, Max);
2880
}

2448.cpp

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <stdio.h>
2+
char map[3072 +1][3072 * 2+1];
3+
4+
void divide(int x, int y, int size) {
5+
if (size == 3) {
6+
map[x][y] = 1;
7+
map[x + 1][y - 1] = 1;
8+
map[x + 1][y + 1] = 1;
9+
for (int i = y - 2; i <= y + 2; i++) {
10+
map[x + 2][i] = 1;
11+
}
12+
}
13+
else {
14+
/*printf("1");*/
15+
divide(x, y, size / 2);
16+
divide(x + size / 2, y + size / 2, size / 2);
17+
divide(x + size / 2, y - size / 2, size / 2);
18+
}
19+
}
20+
int main() {
21+
int num;
22+
scanf("%d", &num);
23+
24+
divide(0, num, num);
25+
26+
for (int i = 0; i < num ; i++) {
27+
for (int j = 1; j < num * 2; j++) {
28+
if (map[i][j] == 1) {
29+
printf("*");
30+
}
31+
else {
32+
printf(" ");
33+
}
34+
}
35+
printf("\n");
36+
}
37+
}

2904.cpp

+24-64
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,38 @@
11
#include <stdio.h>
2-
#include <vector>
3-
using namespace std;
4-
vector<int> v;
5-
int cnt[1000000];
6-
int prime[1000000];
7-
void make() {
8-
for (int i = 2; i <= 1000000; i++) {
9-
if (prime[i] == 0) {
10-
v.push_back(i);
2+
#define Size 3072 * 2;
3+
char map[Size][Size];
4+
5+
void divide(int x,int y, int size) {
6+
if (size == 3) {
7+
map[x][y] = 1;
8+
map[x + 1][y - 1] = 1;
9+
map[x + 1][y + 1] = 1;
10+
for (int i = y - 2; i <= y + 2; i++) {
11+
map[x + 2][i] = 1;
1112
}
1213
}
13-
}
14-
void makePrime() {
15-
for (int i = 2; i < 1000000; i++) {
16-
if (prime[i] == 0) {
17-
int n = 2;
18-
int tmp = i*n;
19-
while (tmp <=1000000) {
20-
prime[tmp] = 1;
21-
n++;
22-
tmp = i * n;
23-
}
24-
}
14+
else {
15+
/*printf("1");*/
16+
divide(x, y, size / 2);
17+
divide(x + size / 2, y + size / 2, size / 2);
18+
divide(x + size / 2, y - size / 2, size / 2);
2519
}
2620
}
27-
int primeSum[1000000]={0,};
28-
int primeSave[100][1000000];
2921
int main() {
3022
int num;
3123
scanf("%d", &num);
32-
makePrime();
33-
int tmp;
34-
make();
35-
primeSum[0] = 0;
36-
for (int i = 0; i < num; i++) {
37-
scanf("%d", &tmp);
38-
int pos = 0;
39-
40-
while (tmp != 1) {
41-
if (tmp % v[pos] == 0) {
42-
tmp = tmp / v[pos];
43-
primeSave[i][pos]++;
44-
primeSum[pos]++;
45-
24+
25+
divide(0, num ,num);
26+
27+
for (int i = 0; i < num * 2; i++) {
28+
for (int j = 0; j < num * 2; j++) {
29+
if (map[i][j] == 1) {
30+
printf("*");
4631
}
4732
else {
48-
pos++;
49-
}
50-
}
51-
/*for (int j = 0; j < 10; j++) {
52-
printf("%d ", primeSave[i][j]);
53-
}
54-
printf("\n");*/
55-
}
56-
57-
/*for (int j = 0; j < 10; j++) {
58-
printf("%d ", primeSum[j]);
59-
}
60-
printf("\n");*/
61-
62-
int count = 0;
63-
int Max = 1;
64-
for (int i = 0; i < 1001; i++) {
65-
for (int j = 0; j < primeSum[i]/num; j++) {
66-
Max = Max * v[i];
67-
}
68-
}
69-
printf("%d ", Max);
70-
for (int i = 0; i < num; i++) {
71-
for (int j = 0; j < 1001; j++) {
72-
if (primeSave[i][j] < primeSum[j] / num) {
73-
count += primeSum[j] / num - primeSave[i][j];
33+
printf(" ");
7434
}
7535
}
36+
printf("\n");
7637
}
77-
printf("%d", count);
7838
}

0 commit comments

Comments
 (0)