回答編集履歴

4

コードの改善 (search の呼び出しを 1つにまとめた)

2021/09/07 14:03

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ```C
4
4
 
5
- #include <stdio.h> // scanf, printf
5
+ #include <stdio.h> // scanf, printf
6
6
 
7
7
 
8
8
 
@@ -36,7 +36,7 @@
36
36
 
37
37
  v[0] = 0;
38
38
 
39
- int n = 2, q, c, x;
39
+ int q, c, x, n = 2;
40
40
 
41
41
  scanf("%d%d", &v[1], &q);
42
42
 
@@ -44,30 +44,24 @@
44
44
 
45
45
  scanf("%d%d", &c, &x);
46
46
 
47
+ int i = search(v, n, x);
48
+
47
49
  if (c == 1) {
48
50
 
49
- int i = search(v, n, x);
50
-
51
- for (int j = n; j > i; j--) v[j] = v[j-1];
51
+ for (int j = n++; j > i; j--) v[j] = v[j-1];
52
52
 
53
53
  v[i] = x;
54
54
 
55
- n++;
56
-
57
55
  }
58
56
 
59
- else {
60
-
61
- int i = search(v, n, x);
62
-
63
- printf("%d\n", v[i] - v[i-1]);
57
+ else printf("%d\n", v[i] - v[i-1]);
64
-
65
- }
66
58
 
67
59
  }
68
60
 
69
61
  }
70
62
 
63
+
64
+
71
65
  ```
72
66
 
73
67
  これのどこが分からないのかをコメントしてください。

3

不要なコードの削除

2021/09/07 14:03

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -33,8 +33,6 @@
33
33
  {
34
34
 
35
35
  static int v[200002];
36
-
37
- if (!v) return puts("out of memory");
38
36
 
39
37
  v[0] = 0;
40
38
 

2

malloc をやめて、static に変更

2021/09/07 13:22

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -3,8 +3,6 @@
3
3
  ```C
4
4
 
5
5
  #include <stdio.h> // scanf, printf
6
-
7
- #include <stdlib.h> // malloc, free
8
6
 
9
7
 
10
8
 
@@ -34,7 +32,7 @@
34
32
 
35
33
  {
36
34
 
37
- int *v = malloc(sizeof(int[200002]));
35
+ static int v[200002];
38
36
 
39
37
  if (!v) return puts("out of memory");
40
38
 
@@ -70,8 +68,6 @@
70
68
 
71
69
  }
72
70
 
73
- free(v);
74
-
75
71
  }
76
72
 
77
73
  ```

1

コードの修正

2021/09/07 13:20

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  {
36
36
 
37
- int *v = malloc(sizeof(int[1000000001]));
37
+ int *v = malloc(sizeof(int[200002]));
38
38
 
39
39
  if (!v) return puts("out of memory");
40
40