回答編集履歴
5
間違えてVBA式で比較文書いてた
test
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
本来やりたかったのは
|
47
47
|
```C
|
48
48
|
for (int i = 0; i < P.size(); ++i)
|
49
|
-
if(i
|
49
|
+
if(i!=0)
|
50
50
|
S.push_back(P[i-1] + P[i]);
|
51
51
|
```
|
52
52
|
なんだろうなぁ。と思っていますが、こればかりは質問者が意図する出力次第なのであくまで提案のみにとどめさせていただきます。
|
4
誤字修正
test
CHANGED
@@ -49,4 +49,4 @@
|
|
49
49
|
if(i<>0)
|
50
50
|
S.push_back(P[i-1] + P[i]);
|
51
51
|
```
|
52
|
-
なんだろうなぁ。と思っていますが、こればかりは質問者
|
52
|
+
なんだろうなぁ。と思っていますが、こればかりは質問者が意図する出力次第なのであくまで提案のみにとどめさせていただきます。
|
3
最後の部分のみ計算が合わないので一旦回答保留
test
CHANGED
@@ -30,13 +30,11 @@
|
|
30
30
|
res = max(res, a + *it);
|
31
31
|
}
|
32
32
|
```
|
33
|
-
こちらで
|
33
|
+
こちらでresの中に48が格納され、
|
34
|
-
*(it)はupper_bound(50-24)で26より大きい中で先頭の29が初期値になります。この時がresの最大値となる48になります。
|
35
|
-
最後に
|
36
34
|
```cpp
|
37
35
|
cout << res << endl;
|
38
36
|
```
|
39
|
-
で
|
37
|
+
で最後に出力された結果、あのような出力となった、というわけです。
|
40
38
|
|
41
39
|
### となると考えられるミスは
|
42
40
|
```C
|
2
ワンチャン2重ループの中身理解してなかった時のためにさらに詳しく
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
for (int j = 0; j < P.size(); ++j)
|
5
5
|
S.push_back(P[i] + P[j]);
|
6
6
|
```
|
7
|
-
まずここで、**Pの要素を個別に合算した配列をP^2個分生成してます。**
|
7
|
+
まずここで、**Pの要素を個別に合算した配列をP.size個*P.size個=P^2個分生成してます。**
|
8
8
|
もっと簡潔に言うと、このfor文は
|
9
9
|
**P[0]+P[0]~P[N]+P[N]の結果を順番にSに挿入している形になってます。**
|
10
10
|
S=3+3,3+14,3+15~**0+0**っていう動きなんですね。
|
1
補足
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
### なんでこんな出力になったのか
|
2
2
|
```C
|
3
3
|
for (int i = 0; i < P.size(); ++i)
|
4
4
|
for (int j = 0; j < P.size(); ++j)
|
@@ -37,3 +37,18 @@
|
|
37
37
|
cout << res << endl;
|
38
38
|
```
|
39
39
|
で48が出力され、あのような出力となった、というわけです。
|
40
|
+
|
41
|
+
### となると考えられるミスは
|
42
|
+
```C
|
43
|
+
for (int i = 0; i < P.size(); ++i)
|
44
|
+
for (int j = 0; j < P.size(); ++j)
|
45
|
+
S.push_back(P[i] + P[j]);
|
46
|
+
```
|
47
|
+
まぁ、ここだと思います。
|
48
|
+
本来やりたかったのは
|
49
|
+
```C
|
50
|
+
for (int i = 0; i < P.size(); ++i)
|
51
|
+
if(i<>0)
|
52
|
+
S.push_back(P[i-1] + P[i]);
|
53
|
+
```
|
54
|
+
なんだろうなぁ。と思っていますが、こればかりは質問者外とする出力次第なのであくまで提案のみにとどめさせていただきます。
|