プログラミングのお題スレ Part22
1 :デフォルトの名無しさん :2023/08/03(木) 13:52:13.20 ID:/xW45k0z.net プログラミングのお題スレです。 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん >>1 使用言語 回答本文 結果がある場合はそれも 【ソースコードが長くなったら】 (オンラインでコードを実行できる) https://ideone.com/ http://codepad.org/ http://compileonline.com/ http://rextester.com/runcode https://runnable.com/ https://code.hackerearth.com/ http://melpon.org/wandbox https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。 ※前スレ プログラミングのお題スレ Part21 https://mevius.5ch.net/test/read.cgi/tech/1668333636/
298 :デフォルトの名無しさん :2024/03/01(金) 22:22:26.10 ID:6k2oCbjk.net >>284 C++ https://ideone.com/1c4s5I >>296 はa, bの二重ループ内でa³ − b³をD = 5001で割った余りrにより区分していたが、 rのループ内でa, bを変化させるように変更したら、2次元配列がなくなってすっきりした。 その結果、メモリ使用量が激減し、nが大きい場合でも実行できるようになった。
299 :デフォルトの名無しさん :2024/03/01(金) 22:23:18.03 ID:6k2oCbjk.net >>298 の続き n = 1000000, m = 6で実行すると、12通りの解が見つかった。 [6つ組解] 424910390480793: (75978, 23919), (77385, 33768), (83482, 53935), (141705, 134268), (317982, 316575), (596001, 595602) 620174235433536: (86184, 27132), (87780, 38304), (90237, 48573), (94696, 61180), (160740, 152304), (360696, 359100) 1238805803151000: (107487, 14487), (108540, 34170), (110550, 48240), (119260, 77050), (454260, 452250), (851430, 850860) 1384074844012224: (112152, 29844), (125324, 83600), (130050, 93426), (159372, 138624), (224928, 215412), (357447, 353799) 1936290882196125: (127629, 52254), (133320, 75675), (149285, 111620), (228525, 215430), (246510, 235395), (290214, 282339) 4589726535576000: (170172, 69672), (177760, 100900), (185265, 120945), (304700, 287240), (328680, 313860), (386952, 376452) 4961393883468288: (172368, 54264), (175560, 76608), (180474, 97146), (189392, 122360), (321480, 304608), (721392, 718200) 11072598752097792: (224304, 59688), (250648, 167200), (260100, 186852), (318744, 277248), (449856, 430824), (714894, 707598) 36717812284608000: (340344, 139344), (355520, 201800), (370530, 241890), (609400, 574480), (657360, 627720), (773904, 752904) 52279853819295375: (382887, 156762), (399960, 227025), (447855, 334860), (685575, 646290), (739530, 706185), (870642, 847017) [7つ組解] 15490327057569000: (249281, 6281), (255258, 104508), (266640, 151350), (298570, 223240), (457050, 430860), (493020, 470790), (580428, 564678) 123922616460552000: (498562, 12562), (510516, 209016), (533280, 302700), (555795, 362835), (597140, 446480), (914100, 861720), (986040, 941580) 6つ組解の(2, 7), (4, 8), (5, 10), (6, 9)番目は各括弧内で自然数比になっている。 6つ組解の5番目の2倍は7つ組解の1番目のうちの6組を構成している。
300 :デフォルトの名無しさん :2024/03/01(金) 22:24:42.81 ID:6k2oCbjk.net >>284 C++ https://ideone.com/tM1cuo >>298 のrのループ内でa³ − b³をD2 = 5003で割った余りr2により区分し、それぞれの区分ごとに 解を探すようにしたら速くなった。ただし、nが大きい場合にはかえって遅くなる。
301 : :2024/03/03(日) 19:08:39.58 ID:75HCbpT6.net >>299 出題者です。 すごいです。ありがとうございます。私の手元ではまだ6通り解、7通り解のひとつも入手できていないので、参考になりました 私のアルゴリズムは効率が悪いようですね
302 :デフォルトの名無しさん :2024/03/03(日) 22:19:54.92 ID:ZEDvt9uH.net >>284 C++ https://ideone.com/LEU7EV >>300 でnを大きくするにつれ>>298 に対する高速化効果が薄れていくのは、ABをvectorでなく 配列にしたらある程度改善された。n = 5000のときの実行時間は>>298 の半分以下になった。 ただし、n = 1000000まで大きくすると、296よりやっぱり遅くなる。 >>301 どんなプログラムを書いたのか見せて。
303 :デフォルトの名無しさん :2024/03/06(水) 22:35:52.23 ID:lIZep5aT.net >>284 C++ https://ideone.com/PG6UiY >>302 の実行時間を分析すると、最も時間が掛かっているのは46〜と47行目だと判明した。 そこで配列ABの第1次元と第2次元を入れ替えてみると、n = 5000では変わらないが、 1万, 2万, 5万, 10万, 20万では35%前後高速になった。これは、改良前には第2次元の添字が 小さい要素に書き込みが集中しているため、改良後のように第1次元に入れ替えた方が 纏まったメモリ領域に書き込みが集中しキャッシュの効きが良くなるからだと考えられる。 一方、n = 100万で高速化しないのは、書き込み集中領域が大きすぎるからだろう。 https://ideone.com/6RzW0n n = 100万の場合にはr2の値によってデータを多数の列へ振り分けるのをやめ、列を1つにして、 その内部でr2の値により2種類に区分し、それぞれの内部で2種類にさらに区分し、…と再帰的に 区分していけば(要するにクイックソートの変形版)、1つの配列内での要素のスワップだけで済み、 キャッシュの効きが改善されるとの予想通り、n = 100万で実行速度は>>298 より25%速くなった。 (原理的には>>302 より非効率なのでn = 5000では>>302 より当然遅い)
304 :デフォルトの名無しさん :2024/03/08(金) 19:02:53.21 ID:oHHhAfhn.net >>303 ハズレが多いから2passは効果ある?
305 :デフォルトの名無しさん :2024/03/09(土) 22:13:47.64 ID:C74EWG6S.net >>284 C++ https://ideone.com/xQD1W8 関数mainのループで配列A, B, Pに書き込まずdにだけ書き込むようにし、関数FindDuplicatesで dの添字Pではなくdそのものをソートするように変えて、n = 1000000の場合に>>303 より10%高速化。 関数PrintSolutionでa, bをmainでと同じ方法で再計算するのは非効率だが、PrintSolutionは僅か12回しか 呼ばれないため、全体の実行時間への影響は無視できる。
306 :デフォルトの名無しさん :2024/03/09(土) 22:47:01.30 ID:v99WCN19.net お題 460円 580円 600円 の3種類の商品があります これらを組み合わせて合計10個買ったら5360円になりました 組み合わせを求めるプログラムを書いてください ちなみに答えの一つは ・600円×2 ・580円×4 ・460円×4 だそうです https://rio2016.5ch.net/test/read.cgi/cigaret/1706726196/56-57
307 :デフォルトの名無しさん :2024/03/09(土) 23:59:51.39 ID:C74EWG6S.net >>306 面倒なのでRで全探索 https://ideone.com/vrtYvk
308 :デフォルトの名無しさん :2024/03/10(日) 01:20:18.65 ID:8NU5B5F+.net >>306 面倒なので全て460円を引くと A=0円 B=120円 C=140円 10個で760円という問題 面倒なのでさらに20で割ると A=0円 B=6 C=7円 10個で38円という問題 つまり唯一奇数のCは偶数個が確定 Cが6個以上だと42円以上でオーバーしてNG Cが4個だと28円で残り10円をA,Bで作れないからNG Cが2個だと14円で残り24円はBが4個で残り4個がA Cが0個だと0円で残り38円をA,Bで作れないからNG つまり解は(A,B,C)=(4,4,2)しかない
309 :デフォルトの名無しさん :2024/03/10(日) 11:20:30.42 ID:Doj9A/yB.net >>308 すごすぎるだろ、日本の未来を頼む
310 :デフォルトの名無しさん :2024/03/10(日) 19:06:13.20 ID:qBLPZ6x8.net >>306 Rで全探索でなくちゃんと解くと https://ideone.com/F44pCL 解が複数ある場合と全くない場合の例として、600円を540円と520円に変更したときの出力も載せた。
311 :デフォルトの名無しさん :2024/03/10(日) 20:08:55.20 ID:6qxPF4Wx.net 2pass案は多少工夫したらかなり速い n ␣␣m ␣296␣ ␣301-1 ␣301-2 ␣303␣ ␣2pass 5k␣␣5 ␣ 0.5s ␣ 0.1s ␣ 0.5s ␣ 0.4s ␣ 0.1s 25k ␣5 ␣12.7s ␣ 2.5s ␣13.9s ␣11.1s ␣ 1.7s 100k␣5 ␣3m52s ␣49.3s ␣4m13s ␣3m26s ␣38.9s 1M* ␣6 ␣8h23m ␣2h50m ␣8h51m ␣6h43m ␣1h11m *n=100万は1万サンプルの部分ループ500k≦r<510kから100倍 >>303 の296と301-2の比較記述と違う傾向があるのはキャッシュ階層の違いだと思う 2passは301-1に近いけど1pass目でのランダムアクセスサイズを落としながらも 誤判定率を低く抑える(0.2%~2%)工夫をするのがお楽しみだと思う
312 :デフォルトの名無しさん :2024/03/14(木) 14:43:15.33 ID:ZraPd1+Q.net t
313 :デフォルトの名無しさん :2024/03/27(水) 23:42:08.75 ID:sRZ89+IF.net >>306 a = (600, 580, 460) m = min(a) h = set() def buy(b, yen): if yen < m: return for i in range(0, len(a)): v = a[i] if yen >= v: b[i] += 1 if yen == v: h.add(str(b)) else: buy(b, yen - v) b[i] -= 1 buy([0, 0, 0], 5360) for s in h: print(s)
314 :デフォルトの名無しさん :2024/03/27(水) 23:55:15.74 ID:qNf/D02g.net >>306 Haskell [(a, b, c) | a <- [0..20], b <- [0..20], c <- [0..20], a * 460 + b * 580 + c * 600 == 5360] output: [(0,2,7),(4,4,2)]
315 :デフォルトの名無しさん :2024/03/28(木) 00:00:41.99 ID:0Zoa9Vsx.net 合計10個という条件忘れてた。 [(a, b, c) | a <- [0..20], b <- [0..20], c <- [0..20], a + b + c == 10, a * 460 + b * 580 + c * 600 == 5360] output: [(4,4,2)]
316 :デフォルトの名無しさん :2024/03/31(日) 11:57:53.31 ID:enek7T1c.net 大幅に手直しした 特に前回数値が一部出てこない状態になっていたので色々と手動で最適化した 新しいアイディアを思いつかない限りはシングルスレッドでの限界に近いと思う n m 301-1 303 2pass 2pass' 5k 5 0.1s 0.4s 0.1s 0.1s 25k 5 2.5s 11.1s 2.3s* 1.7s 100k 5 49.3s 3m26s 38.9s 27.7s 1M* 6 2h50m 6h43m 1h11m 48m10s 2M* 6 17h06m 28h27m 5h47m 3h13m Max* 6 35h51m 51h23m 11h09m 5h47m *前回>>311 2pass n=25kの再計測値 *n=1Mは部分ループ500k<=r<510kから100倍 *n=2Mは部分ループ500k<=r<505kから400倍 *Max:=2642245は3乗がUINT64に収まる最大 *n=Maxは部分ループ500k<=r<500k+3785から2642245/3785倍 ヒント含みの数値がこちら n D1 D2 D3 = 5000 5001 5003 5009 false_positive = 23 / 5001 = 0.46% total_t_pass1 = 64.220 ms 2.568 ns/iter total_t_pass2 = 0.044 ms 0.381 ns/iter real 0m0.097s
317 :デフォルトの名無しさん :2024/03/31(日) 11:58:50.32 ID:enek7T1c.net n D1 D2 D3 = 25000 25003 25005 25006 false_positive = 171 / 25003 = 0.68% total_t_pass1 = 1654.681 ms 2.647 ns/iter total_t_pass2 = 1.407 ms 0.329 ns/iter real 0m1.709s false_positive = 2211 / 100005 = 2.21% total_t_pass1 = 27338.298 ms 2.734 ns/iter total_t_pass2 = 78.402 ms 0.355 ns/iter real 0m27.692s n D1 D2 D3 = 1000000 1000002 1000009 1000015 false_positive = 18 / 10000 = 0.18% total_t_pass1 = 28674.338 ms 2.867 ns/iter total_t_pass2 = 5.642 ms 0.313 ns/iter real 0m28.897s n D1 D2 D3 = 2000000 2000003 2000013 2000015 false_positive = 13 / 5000 = 0.26% total_t_pass1 = 28777.424 ms 2.878 ns/iter total_t_pass2 = 8.620 ms 0.332 ns/iter real 0m29.015s n D1 D2 D3 = 2642245 2642246 2642253 2642258 false_positive = 315 / 3785 = 8.32% total_t_pass1 = 29210.857 ms 2.921 ns/iter total_t_pass2 = 336.864 ms 0.405 ns/iter real 0m29.800s
318 :デフォルトの名無しさん :2024/03/31(日) 22:30:39.09 ID:4FIGx2uN.net >>306 ぶっちゃけ、他の言語の人と同じっぽくないので心配なんだが…。 自分なりにHaskellで全探索じゃないバージョン書いてみた。 Haskell [(a, b, c) | a <- [0..10], b <- [0..10 - a], c <- [0..10 - (a + b)], a * 460 + b * 580 + c * 600 == 5360, a + b + c == 10] 答えは同じ[(4,4,2)]。
319 :デフォルトの名無しさん :2024/04/01(月) 04:52:23.91 ID:iTC1bSa8.net 少し一般化して、N個の商品があり、i番目の商品はA_i円です 合計M個購入し、価格の合計がS円であるような購入の仕方を998244353で割った余りを求めてください だとO(N M S)より小さい計算量で解けるのかな
320 :デフォルトの名無しさん :2024/04/01(月) 16:50:08.47 ID:0Kkx57P3.net 2個、4個、8個…みたいにメモ化すればMはlogMにできるかもしれんね 空間がlogM倍されそうだが
321 :デフォルトの名無しさん :2024/04/13(土) 11:43:17.27 ID:itq2kjOw.net ヘロンの公式を実装せよ 使用言語:C
322 :17 :2024/04/13(土) 16:57:10.76 ID:SxW/5mRR.net >>321 https://paiza.io/projects/_ZdSzHtV9YdEzV-oOySQWQ Wikipedia でヘロンの公式を調べてそのまま実装しただけで、ほとんど何も考えてない。
323 :デフォルトの名無しさん :2024/04/13(土) 23:01:22.75 ID:wFZkrOeZ.net >>321 https://ideone.com/YCi6qe ヘロンが作ったもう1つの式である平方根を加算と除算の繰り返しで求める式も使用。 sqrt関数を呼び出すより実行形式ファイルサイズがほんの少しだけ小さくなる。
324 :デフォルトの名無しさん :2024/04/14(日) 00:59:32.83 ID:ujzJ2+0Y.net >>323 無限ループにならない? 機械イプシロン(DBL_EPSILON)とか気になる
325 :デフォルトの名無しさん :2024/04/14(日) 18:34:21.49 ID:MHeAinLP.net 解答例 #include <stdio.h> #include <math.h> void heron(double, double, double); int main(void) { double a, b, c; printf("3辺a, b, cを入力せよ "); scanf("%lf,%lf,%lf", &a, &b, &c); heron(a, b, c); } void heron(double x, double y, double z) // heronの定義 { double s, t; s = (x+y+z)*0.5; t = s*(s-x)*(s-y)*(s-z); printf("3角形の面積は S=%g\n", sqrt(t)); return; }
326 :デフォルトの名無しさん :2024/04/14(日) 18:36:52.16 ID:MHeAinLP.net >>323 さすがですね
327 :デフォルトの名無しさん :2024/04/15(月) 21:01:04.41 ID:dSNEYg5r.net >>324 p < 0 のとき(= 三角形を作れない場合)は浮動小数点数の特性に関係なく無限ループになる。 sqrt(p) と同様にNANを返すには、if (p < 0) return 0 / (p - p); を追加すれば良い。 p > 0 のときは無限ループにならないはず。以下が検証プログラム。 https://ideone.com/mzemEM x = sqrt(p), y = p / x とすると、浮動小数点数の特性により x == y とならない場合は存在する。 このとき、xとyの仮数部を整数と見なした値(以降では「仮数整数」と呼ぶ)の差は1なので、 z = (x + y) / 2 はxとyのうち仮数整数が偶数の方に一致する。zを新たなxとして代入しyとzを 再計算すれば、今度はxの仮数整数が偶数なのでzはxに必ず一致し、>>323 の収束判定条件が成立する。 具体例で見ると、p = 2 のときはxの仮数整数が奇数なので x != z となるが、zを新たなxとして代入し 再計算すれば x == z が成立する。桁上がりが起こる p = 3.9999999999999996 のときも、同様に 再計算で x == z が成立する。p = 3 のときはxの仮数整数が偶数なので x == z が成立し再計算は不要。
328 :デフォルトの名無しさん :2024/04/15(月) 22:06:46.39 ID:MxMoolaJ.net >>327 解説ありがとう 俺には理解できないレベルだと分かりましたw 俺なら収束の自信が無くてDBL_EPSILONを使った判定と ループ回数上限を組み合わせて実装しそうだ
329 :デフォルトの名無しさん :2024/04/17(水) 05:47:35.77 ID:F2fqxIYT.net ヘロンの公式はそのままだと、数値計算での安定性が良くないらしいぞ 解決策は、Wikipediaの英語版の方に… tps://en.wikipedia.org/wiki/Heron%27s_formula#Numerical_stability
330 :327 :2024/04/17(水) 05:52:23.77 ID:F2fqxIYT.net そしてこんなとこでもカハンせんせーの名前がが
331 :デフォルトの名無しさん :2024/04/17(水) 16:28:33.14 ID:7JRzlbtx.net の長さ この公式で計算される面積は、理論的には正しい値です。しかし、実際には、以下の理由で誤差が生じる可能性があります。 数値計算の誤差: 計算機で数値を扱う場合、有限桁しか扱えないため、丸め誤差が生じます。特に、辺の長さの値が大きく異なる三角形の場合、この誤差が顕著になります。 四捨五入誤差: 計算結果を小数点以下n桁まで表示する場合、n桁目以降の数字を切り捨てます。この四捨五入誤差も、面積の誤差に影響を与えます。 by Gemini
332 :デフォルトの名無しさん :2024/04/17(水) 23:38:33.35 ID:k4k/eSae.net >>329 に載っている参考文献 William M. Kahan, ‘Miscalculating Area and Angles of a Needle-like Triangle’ http://www.cs.berkeley.edu/~wkahan/Triangle.pdf のTable 1の問題がパソコン等でのC++プログラムでも再現されるか試してみた。 https://ideone.com/r4toUS Table 1とは違い、Accurate Δが概ね正確な場合にHeron's Δ'が大きく懸け離れた不正確な値に なってしまうことはなく、ほぼ同じ値になり差はごく僅かしかない。Table 1のような不安定性は Table 1の計算に使われたプログラマブル関数電卓に特有の問題で、パソコン等のプログラムでは 再現されない。(パソコン等のdoubleの方が精度が高いので当然と言えば当然だが) 一方、(a, b, c) = (5278.64055, 94721.35941, 99999.99996)の場合は、逆にHeron's Δ' = 0が 正確なのにAccurate Δ = 9.53674324543714が大きく懸け離れた不正確な値になってしまう 重大な欠点がある。これは、Accurate Δの式の根号内の第2因数c - (a - b)が正確には0なのに 3.63797880709171e-12と計算されてしまい、この誤差が他の因数との乗算により増幅されるから。 Heron's Δ'の式の根号内の第4因数s - cは0と計算されるので問題ない。 double向けの入力値(a, b, c) = (31622.77777777662, 0.000000000023, 31622.77777777661)を 作れば、Heron's Δ' = 2.30085990753844e-07, Accurate Δ = 3.20111707955507e-07となり、 相対差は確かに大きくなるが、200ビットで計算したほぼ正確な値3.27490470056059e-07から 見れば両方とも不正確だから、Accurate Δの利点はない。 だから、パソコン等のプログラムでは改良版の式を使う必要がないどころか使うべきではなく、 ヘロンの公式をそのまま使う方が良い。
333 :デフォルトの名無しさん :2024/04/18(木) 07:16:50.63 ID:8T8m8Yde.net >(a, b, c) = (5278.64055, 94721.35941, 99999.99996) >c - (a - b)が正確には0なのに3.63797880709171e-12と計算されてしまい この例に限らず、たいていの場合a,b,cはdoubleでexactに格納されて無くて この例では「c - (a - b)が正確には0」なのをチョイスしただけでは?
334 :デフォルトの名無しさん :2024/04/18(木) 07:30:10.21 ID:PYBA8OB3.net パソロジカルな三角形をパラメトライズして面積を積分する検証はどう? 数式計算での正確な値 Heronで面積計算した時の数値積分 Accurateで面積計算した時の数値積分 を比べるのがフェアかなぁと
335 :デフォルトの名無しさん :2024/04/18(木) 07:34:09.77 ID:PYBA8OB3.net > 200ビットで計算したほぼ正確な値3.27490470056059e-07 この例だけ見るとAccurate Δの方が優れているように見えるので >>333 の様なチェリーピックはどちらの計算式でも出来るので平均的に近似が近い方が精度的に優れているかと
336 :デフォルトの名無しさん :2024/04/18(木) 22:41:59.70 ID:y7NBfn6/.net >>333 その通り。そして、(a, b, c) = (10000.1, 10000.2, 20000.3)とすれば、正しい面積は0なのに Heron's Δ' = 2.69745899635295とAccurate Δ = 1.34872949817647は両方とも大間違いになる。 この場合のようにHeron's Δ'での問題がAccurate Δで改善されないだけでなく、>>333 の引用の 場合のようにHeron's Δ'では結果的に問題ないのにAccurate Δでは新たな問題が生じてしまうのは、 参考文献の11ページで述べられた An algorithm stood convicted of numerical instability if it could be replaced by a new algorithm at least about as fast and accurate as the old for all data, and good for all data for which the old algorithm was bad. すべてのデータに対して旧アルゴリズムと少なくとも同じくらい高速かつ正確であり、 かつ旧アルゴリズムが悪くなるすべてのデータに対して良くなる新アルゴリズムによって 置き換えることができるとしたら、旧アルゴリズムは数値的に不安定と判定される。 という判定条件を満たさないから、Accurate Δは改良版としての適性を欠く。 >>335 その例では有効桁数がHeron's Δ'は0桁、Accurate Δは1桁しかなく、どちらの品質も絶対的に 劣悪で、それらの間の相対的な優劣に大した意味はない。 そもそも針のように異様に細長い三角形が重箱の隅をつつくような話で、普通はそんな場合は 想定しなくても良く、ヘロンの公式で充分。そこを敢えてつつくなら、ヘロンの公式だけでなく 改良式もぼろが出てしまうだけ。
337 :デフォルトの名無しさん :2024/04/18(木) 22:55:38.47 ID:n9UdHBZN.net 総合すると有効桁じゃなくて精度が2桁良いし実装上は大差ないから改良版を使う、と言う方が自然では?
338 :デフォルトの名無しさん :2024/05/01(水) 12:56:47.83 ID:nIC3qyB/.net スレ落ちそうなのであげ
339 :デフォルトの名無しさん :2024/05/01(水) 15:39:17.16 ID:hqp8cDbc.net >>338 嵐を呼び込むために・・・
340 :デフォルトの名無しさん :2024/05/01(水) 22:59:10.72 ID:4hNncNW1.net 何でこんなに過疎化しちゃったのか。前に頻繁に出題していた人がいなくなったのか。
341 :デフォルトの名無しさん :2024/05/02(木) 10:32:38.87 ID:ijoO2C2L.net お題を出してみてください
342 :デフォルトの名無しさん :2024/05/02(木) 16:59:52.63 ID:DPVqLIsI.net >>340 お題が出尽くしたってことはあるんじゃないか? 過去のお題拾ってきてそれを投稿すればいいぐらいまでスレが成熟してしまったのでは?
343 :デフォルトの名無しさん :2024/05/02(木) 17:21:22.07 ID:pg1ymc2D.net PC買って、脱衣AIで遊びまくってる「 一日一回無料で使えるみたい「 https://mao.5ch.net/test/read.cgi/gymnastics/1322657462/98
344 :17 :2024/05/02(木) 18:44:04.16 ID:LxBZq7I4.net >>342 なるほど。それをやるか。
345 :17 :2024/05/14(火) 05:34:03.62 ID:ou5vbzLn.net じゃあ10年前のこのお題(URLを書くとNGになるようなので書かない)。 プログラミングのお題スレ Part4 115 :デフォルトの名無しさん:2014/06/21(土) 18:36:45.72 ID:/fMJIWig.net お題:文字列Aを1回以上繰り返した文字列Bが与えられたとき 文字列Aを求める。ただしAの候補が複数ある場合は最短のものとする。 例 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -> a 123412312341231234123123412312341231234123 -> 1234123 oxoxoxoxoxoxoxoxxoxoxoxoxoxoxoxoxx -> oxoxoxoxoxoxoxoxx
346 :デフォルトの名無しさん :2024/05/14(火) 17:27:18.46 ID:AXiunB2g.net ttps://ideone.com/KrUq7e Z-algorithm を使って O(|B|) で解いてみた
347 : :2024/05/14(火) 20:59:46.84 ID:xk+62xOP.net >>345 R https://ideone.com/ITR83u C https://ideone.com/g2INyj
153 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★
本文 スレッドタイトル 投稿者