ABC139のD問題をPythonで解いたときにハマったやつ

備忘録です。

まずは誤答例のソースコード

#WA
N = int(input())

print(int(N*(N-1)/2))

次に正答例のソースコード

#AC
N = int(input())

print(N*(N-1)//2)

はい?なにが違うの??

種明かし

誤答例だと一度浮動小数点数を経由しているのがまずいです。どういうことかわかりやすく示したのが次のコード。

ans = 0
for i in range(1,20):
    print(float(ans))
    ans*=10
    ans += i%10

出力結果

0.0
1.0
12.0
123.0
1234.0
12345.0
123456.0
1234567.0
12345678.0
123456789.0
1234567890.0
12345678901.0
123456789012.0
1234567890123.0
12345678901234.0
123456789012345.0
1234567890123456.0
1.2345678901234568e+16
1.2345678901234568e+17

このように、保持可能な仮数より大きな仮数は丸められてしまうわけです。元の問題に戻ると、Nが大きすぎる(例えばN=999999999)場合には誤差が生じてしまうということです。実際に実行してみると以下のようになります。

#N=999999999
N = int(input())
print("N1 =",int(N*(N-1)/2))
print("N2 =",N*(N-1)//2)

出力結果

N1 = 499999998500000000
N2 = 499999998500000001

型が自動的にキャストされるのは便利ですが、バグの原因にもなる得るということでしょうか...。

大学院生は「高等教育段階の教育費負担新制度」で制度の対象外

 先日、twitterで新しい奨学金制度だと大学院生はその対象外になると言う話が流れてきた。確かに文科省のホームページでは、

4-9.その他、対象学生等の認定に関する要件について
Q67 大学院生は新制度の支援対象になりますか。

A67 大学院生は対象になりません。(大学院への進学は18歳人口の5.5%に留まっており、短期大学や2年制の専門学校を卒業した者では20歳以上で就労し、一定の稼得能力がある者がいることを踏まえれば、こうした者とのバランスを考える必要があること等の理由から、このような取扱いをしているものです。)

 高等教育段階の教育費負担新制度に係る質問と回答(Q&A)より

 

となっている。確かに、大学院進学者と同じ年齢層で働いている人はたくさんいる。しかし、それが国から大学院生への支援をしなくても良い理由にはならない。というのも、奨学金制度の本来の目的、つまり、能力がありながら経済的な理由で教育を受けられない人を減らすという目的から逸脱しているからである。一部の人(=大学院進学者)にしか修学支援が届かない「不平等」な支援を文科省はしたくないのだろうけれども、教育の機会均等とは、全ての児童生徒に同一の教育を与えるというものではなく、個人差に応じた教育を施すものであるから、文科省の論理は教育の機会均等の論理から外れているように思える。また、18歳人口と比べた場合の学士課程入学者の割合は50.6%と18歳人口の約半分である(浪人生や再入学者の考慮をしているのかは不明)。文科省の論理だと、こうした高卒・中卒の一定の稼得能力がある者とのバランスを考えないのはおかしくないか。加えて、20歳以上で就労する人がいることを大学院進学者に対する支援をしない理由にしているのに、全大学生が20歳以上になるはずの大学3年以上で支援を止めるようにしないのも、理由に対する結果としていまいちはっきりしない。

 今回の問題で最大の壁になるのが、大学院進学者は少数派であることだ。この問題が自分の問題として表面化するのはごくわずかで、多くの人にとっては無関係なことなのである。一方で、この問題に近しい人の中には発言力のある人(例えば大学教員)がいることも事実である。今後、この問題に多くの人を巻き込むには、積極的な発言によって認知度を上げることが重要だ。

  

今後の論点

  • 大学院進学者への就学支援をしないことで生じる損失の推定
  • 大学院進学者への就学支援をしないことへの他の理由は何か

注意

これは私が独りで考えた私見です。最大限の整合性を図っていますが、必ずしも正しいとは限りません。論理的な批判は随時募集しています。

参考文献

http://www.mext.go.jp/a_menu/koutou/hutankeigen/1409388.htm 2019/07/28参照

http://www.mext.go.jp/component/b_menu/shingi/giji/__icsFiles/afieldfile/2017/07/24/1386653_05.pdf 2019/07/28参照

http://www.mext.go.jp/b_menu/kihon/about/004/a004_03.htm 2019/07/28参照

はじめまして。onetarohです。ほんとは名前を1tarohにしたかったのだけど、文字制限で断念しました。残念。一応大学生をしております。

さて、このブログでは私が暇なときや何か書きたくなったときに色々と気ままに書き連ねる予定です。なに?これではよく分からない?なるほど。では、現在興味があることを予め挙げておこうかな。

1.政治

2.コンピュータ

3.プログラミング

4.大学生活

etc.

政治について

2、3をみれば分かるように、政治はあまりわからないのです。が、今後避けて通れぬ道だから、今のうちに学んでおきたいです。変な言論に毒される前に、振り回される前に。

コンピュータについて

今私が使っているのはコンピュータ。あなたが使っているのもコンピュータ。社会に必須のもの。専攻にもしたいので色々と話題にするかもしれないです。

プログラミングについて

cとc++をほんの少し勉強しましたが、全然足りない。c++を更に勉強し、javascriptもやりたい。学んだことをまとめて記事にする予定。

大学生活について

まあ日常話みたいなもの。なにも書くことがなければ書くかもしれない。