X



競技プログラミングにハマるプログラマのスレ 27

■ このスレッドは過去ログ倉庫に格納されています
0001仕様書無しさん
垢版 |
2020/06/30(火) 01:11:14.00
プログラミングコンテスト(プロコン)やオンラインジャッジや競技プログラミング(競プロ)やCTFなどを楽しんでる競技プログラマ(競プロer)の雑談スレ
競プロイベントや競プロ問題や有名競プロerや競プロでよく使うアルゴリズム等について語りあったり、競プロ関連の質問相談なんでもおk
競プロ初心者でググっても解説読んでも分からないことがあったらスレの競プロの先輩方に訊いてみるのも手だよ(‮よいなれしもかるれくてえ教かと籍書かとトイサ説解いすやりか分‬)
次スレは>>950

# オンラインジャッジ・コンテストサイト
## 日本語
yukicoder https://yukicoder.me/
AtCoder https://atcoder.jp/
AIZU ONLINE JUDGE (AOJ) http://judge.u-aizu.ac.jp/onlinejudge/
## 英語
TopCoder
Single Round Match (SRM) 関係リンク集 http://codeforces.com/blog/entry/21879
Marathon Match (MM) https://community.topcoder.com/longcontest/?module=ViewPractice
※TopCoderは初参加までの手順が煩雑です。まずはググってみて、それでも分からなかったらスレで聞こう!
Codeforces http://codeforces.com/
CS Academy https://csacademy.com/
Project Euler https://projecteuler.net/ 和訳 http://odz.sakura\.ne.jp/proj
※前スレ
競技プログラミングにハマるプログラマのスレ 26
https://medaka.5ch.net/test/read.cgi/prog/1592148203/
0542仕様書無しさん
垢版 |
2020/07/13(月) 22:58:40.95
>>541
x1個の○、…、x5個の○から一つずつ●に置き換える方法がx1*...*x5通りということではなく?(馬鹿にしてるわけではないです)
0543仕様書無しさん
垢版 |
2020/07/13(月) 23:06:00.40
542の言い換えは、普通は知らないと浮かばないレベルの発想だと思います。高度競プロ人材はこういうの得意ですよね。
0544仕様書無しさん
垢版 |
2020/07/13(月) 23:07:00.45
542単独の話ではなくこの問題の中でということで
0545仕様書無しさん
垢版 |
2020/07/13(月) 23:17:47.49
そこは解説pdfにちゃんと書いてあるから(分割を行った後、〜対応しています?)大丈夫かと思っちゃった
0546仕様書無しさん
垢版 |
2020/07/13(月) 23:28:17.96
理解できた気がします
解説放送の方針を勘違いしていました

「x1 * x2 * x3 * x4 * x5 = A を満たす A はいくつあるか」を数え上げるわけではなく、
たとえば (x1, x2, x3, x4, x5) = (1, 3, 1, 1, 2) のとき、
(1, 3, 1, 1, 2) が 6 回数え上げられるので自ずと A に一致する、ということだったのですね

難しいです
自力で思いつくのは大変そうです…
回答ありがとうございました
0547仕様書無しさん
垢版 |
2020/07/13(月) 23:33:09.07
>>505
合同式について今日色々調べていたのですが、使えないケースとかありますか?
例えば13mod10は2^3+2^1+2^0に変換できますが、各項を繰り返し二乗法で計算すると
8+2+1=13となってしまい、期待した答え(余り3)が得られないです
0550仕様書無しさん
垢版 |
2020/07/14(火) 00:05:28.58
>>549
すみません多分私がちゃんと理解できてないのですが…
適当な値が思いつかず13を例にしましたが、64bitに入らないような大きい数の場合は
繰り返し二乗法だけでは最後までは計算できないという事なのでしょうか?
(元々大きい数に対してmodを取りたくて、繰り返し二乗法で計算する(>>471)とコメントを頂いたので)
0551仕様書無しさん
垢版 |
2020/07/14(火) 00:12:16.49
なんか玉石混交過ぎるねここに投げられる質問
>>391とかは結局まだ証明ないし、>>536とかはやるだけ・読むだけっていう
0552550
垢版 |
2020/07/14(火) 00:20:44.44
非常に分かり辛い質問になってしまいました…

繰り返し二乗法で計算したXmod10の結果Yが10以上の場合、最終的な余りをどう求めるべきでしょうか?
Y=13なら13%10で3が求まりますが、Yが64bitに入らない数値だとどうすればよいのでしょうか
0554仕様書無しさん
垢版 |
2020/07/14(火) 00:23:29.04
繰り返し二乗法で計算した値がmodより大きくなるってどういうこと
0555仕様書無しさん
垢版 |
2020/07/14(火) 00:25:46.53
>>552
加算や乗算をするたびにmodを取るようにすれば、
modが10^9+7とかであれば64ビットを超えることはないです
0556仕様書無しさん
垢版 |
2020/07/14(火) 00:37:47.33
動的計画法と線形計画法はどのような共通点がありますか?
0559仕様書無しさん
垢版 |
2020/07/14(火) 00:48:32.81
>>553>>555
有難うございます(何度もレスしてすみません)
ここで言う「modを取る」とは繰り返し二乗法を使わないで、という事でしょうか?
>>547で挙げた13mod10の場合、2^3+2^1+2^0のどの項も10未満なのでmod取って和が13になってしまいます
0561仕様書無しさん
垢版 |
2020/07/14(火) 01:07:55.85
>>560
「13のmodを更に取る」というのは13mod10を計算する、で合っていますか?そうするとまた13になってしまいます(>>547の通り)
(何か私が根本的に勘違いしているのかもしれません)

または、modの計算を1回目は繰り返し二乗法で、1回で答えが出なければ普通に計算(A%B)する、
というルールでやるという意味でしょうか。
0562仕様書無しさん
垢版 |
2020/07/14(火) 01:11:15.74
1010100....01_(2) みたいな数のmodはすぐに計算できないけど、各桁を繰り返し2乗法でmod取りながら求めた値はmod以下だよね
それを足していく時もmodの2倍より大きくならないから、毎回あまりを取りながら足したらいいよ
0564仕様書無しさん
垢版 |
2020/07/14(火) 01:13:38.72
例えば、27=11011_(2) mod 10 を求めたかったら、
2^0=1 mod 10
2^1=2*2^0=2 mod 10
2^2=(2^1)^2=2*2=4 mod 10
2^3=2*2^2=8 mod 10
2^4=(2^2)^2=4*4=16=6 mod 10
を利用して、
27=2^4+2^3+2^1+2^0
=6+8+2+1
=14+2+1
=4+2+1
=6+1
=7 mod 10
と求められる
0566仕様書無しさん
垢版 |
2020/07/14(火) 01:21:43.80
大きな数のあまりを取るのは難しいけど、小さい数のあまりは%演算子とかで取れるから、それを忘れてるんじゃないかな
0568仕様書無しさん
垢版 |
2020/07/14(火) 01:26:32.11
>>551
>>396じゃお気に召さないかね、証明ではないからか?
二乗和の最大化なので、できるだけ最大の数字を増やした方が良い(a+b=c+d,a>b,c>dのときa>cであればaとbに分けた方が良い)
a^2+b^2-c^2-d^2=(a+c)(a-c)-(d+b)(d-b)
a-c=d-bより(a+c-d-b)(a-c)>0、よって示された
0569仕様書無しさん
垢版 |
2020/07/14(火) 01:28:16.23
え、540、542の言い換え天才すぎない?この言い換え典型なの?
典型じゃないとしたら自分には無理だから、形式的冪級数履修するか…
0570仕様書無しさん
垢版 |
2020/07/14(火) 01:39:47.97
>>562>>564
ご丁寧に有難うございます!理解できた気がしました
示して頂いたこの部分(=14+2+1=4+2+1)が「余りを取りながら足す」という事だったんですね

コメントして頂いた方々有難うございました(かなりスレ汚してしまいすみません)

>>566
小さい数が%で計算できるのは分かっているのですが、
その「大きな数」と「小さな数」の判断(どこからが「大きな数」か)をどうすればいいかで悩んでいました
(ここはまだ理解できてないので今後自分で調べようと思います)
0571仕様書無しさん
垢版 |
2020/07/14(火) 01:55:13.38
AtCoder上でパッと自分が思い出せるだけで2問はあるからど典型じゃないかなあ
0572仕様書無しさん
垢版 |
2020/07/14(火) 01:59:07.16
典型ならこの手法も覚えておくか、ありがと
0573仕様書無しさん
垢版 |
2020/07/14(火) 02:09:35.13
はー天才すぎる無理やろこんなんからの意外とすぐまた出会うってのあるあるだからな
0574仕様書無しさん
垢版 |
2020/07/14(火) 17:56:13.86
すぬけさんすき
他のatcoderのひとだいたいすきじゃない
0575仕様書無しさん
垢版 |
2020/07/14(火) 19:33:29.89
りんごさんとwataさんの外から見て嫌いになる要素何?
0576仕様書無しさん
垢版 |
2020/07/14(火) 20:18:09.43
分数の演算を行う構造体を作ろうと思うのですが、使うことはあるでしょうか?
0579仕様書無しさん
垢版 |
2020/07/14(火) 20:29:00.88
赤になるまでは〜のツイートは思うところある人いそう
rngさんはmaroonさんにadmin完全に引き継いでもらったあとcontestantで無双してほしいな
0580仕様書無しさん
垢版 |
2020/07/14(火) 21:01:24.34
分数を表す構造体、足し合わせる分数が多いと通分したときにすぐに分母がオーバーフローしそうで怖い
0582仕様書無しさん
垢版 |
2020/07/14(火) 21:12:20.36
今の時代に多倍長に対応した分数の構造体を使う問題が出るとは思えない
そんな問題を作る橙以上の人がいるとは思えないし、
もし作ったとしても絶対悪問と言われる
やっぱり分数の構造体(特に多倍長に対応したもの)を作る必要性が見い出せない…
0583仕様書無しさん
垢版 |
2020/07/14(火) 21:22:22.32
ちょくだいは最近就活就活言い過ぎで不快なんだよな、それがないとお金入ってこないのはわかるけど
まわり見てても就活の結果とレートそこまで相関ないし
0584仕様書無しさん
垢版 |
2020/07/14(火) 21:38:16.07
boost/multiprecisionの基本的な使い方押さえときゃよくね
0585仕様書無しさん
垢版 |
2020/07/14(火) 21:58:43.80
分数の構造体の件、作っても使わなそうですし、
作る過程で得られるものが特になさそうなので作らないことにします
レスしてくださった皆様ありがとうございました
boost/setprecisionの基本的な使い方についてはまた勉強しておきます
0587仕様書無しさん
垢版 |
2020/07/14(火) 22:13:10.52
>>579
現役に未練はないと言ってたし今年のGCJも出てないみたいだから引退気味なんじゃないかなあ…
0589仕様書無しさん
垢版 |
2020/07/14(火) 22:42:38.82
まだ若いのになんで引退気味なん?
衰えとか感じてんなのかな
0592仕様書無しさん
垢版 |
2020/07/15(水) 02:12:45.60
参加者も増えた分そろそろ就活に役立たないって事が露見してきた感
0593仕様書無しさん
垢版 |
2020/07/15(水) 02:52:42.84
就活には初めから役に立たなかっただろ
学生と社会人が、つまりおれたちが力を合わせて盛り上げるんだよ
0594仕様書無しさん
垢版 |
2020/07/15(水) 03:27:14.83
>>582
ちょうどAtCoderでも宣伝されてる、ICFPコンの2016年の問題は
多倍長有理数が必要な問題だったけど良問と言われてるはず
まあAtCoderで出題される可能性は低いとは思うけどね
0597仕様書無しさん
垢版 |
2020/07/15(水) 05:06:31.07
これ突然こんなこと呟かない気がするけどどういう文脈だったんだろう
0598仕様書無しさん
垢版 |
2020/07/15(水) 06:41:19.26
作問者に対する大量のイチャモンを受けて言ってるんじゃね
0599仕様書無しさん
垢版 |
2020/07/15(水) 09:46:29.17
りんごさんとすぬけさんの解説動画はいつ見てもカッコいいな
0602仕様書無しさん
垢版 |
2020/07/15(水) 17:14:20.42
競プロばっかりやってないで研究しろって怒られちまったぜ
0604仕様書無しさん
垢版 |
2020/07/15(水) 17:40:59.22
競プロは本当にただのネトゲだと思うのがよくて、競プロを使って学習、就職、何かの能力の証明をするって考えは捨てなきゃいけないな…
0605仕様書無しさん
垢版 |
2020/07/15(水) 18:39:25.14
C++のテンプレートの記述順序をどうすればいいかについて悩んでいます

1. ヘッダファイルの読み込み(#include <bits/stdc++.h>)
2. マクロの定義(rep、all)
3. using namespace std;
4. 型定義(typedef、using)
5. 関数定義(chmax)
6. 定数定義(INF、EPS、MOD)

今は上記の順序で記述しています
順序を変えたほうがいいよ、などあれば教えていただきたいです
(定数定義は関数定義の前にあったほうが自然?)
0608仕様書無しさん
垢版 |
2020/07/15(水) 18:59:12.31
レッドコーダーになったらnoteで商材売るわ
ちな緑コーダー
0611仕様書無しさん
垢版 |
2020/07/15(水) 23:55:53.27
>>605
それレートに関係あるの?笑みたいな人多いと思うけど気にする人がいて嬉しい
自分は全く同じ順番ですね、INFとMODはいじることがあるから1番最後が便利だし
気になるならGoogleのコーディング規約とか見てもいいかもしれない
0612仕様書無しさん
垢版 |
2020/07/16(木) 00:14:48.81
どうせ商材作るならもっとターゲットが広そうな題材にしたほうがいい
0614仕様書無しさん
垢版 |
2020/07/16(木) 01:52:53.45
これを履修すれば誰でも緑色になれる教科書とかの方が売れそう
0615仕様書無しさん
垢版 |
2020/07/16(木) 01:58:55.56
>>614
本当にできたら売れるだろうけど無作るのは無理だろうな
同じような事うたってる記事が幾らでもあるけど緑未満は幾らでもいるし
0619仕様書無しさん
垢版 |
2020/07/16(木) 03:05:10.08
誰でも緑というと揉めるからサルでも緑にしよう
0620仕様書無しさん
垢版 |
2020/07/16(木) 09:31:34.42
>>568
a と b に分割するコストは a*b で、c と d に分割するコストは c*d だよね?
なんで a*b と c*d じゃなくて a^2+b^2 と c^2+d^2 を比べるの?
俺今めっちゃ変なこと聞いてる?
0621仕様書無しさん
垢版 |
2020/07/16(木) 09:49:17.21
技術書展で競プロ本書いたらchokudaiさんが宣伝してくれるから無条件で売れるよ
0625仕様書無しさん
垢版 |
2020/07/16(木) 13:18:49.67
こういうのってどうせ二次関数だからだいたい真ん中か端っこで最大とるよね
0626仕様書無しさん
垢版 |
2020/07/16(木) 13:21:56.79
数学得意な人が競プロはじめてすぐ得意になる例はよく聞くけど
競プロ打ち込んだら数学前より得意になりましたって人聞く?
0627仕様書無しさん
垢版 |
2020/07/16(木) 17:09:27.30
今週ABCないんかー
モチベーションだださがりやー
今月中に入水する計画ガー
0628仕様書無しさん
垢版 |
2020/07/16(木) 17:28:35.10
ネトゲやってたら数学得意になりましたってそんな話あると思うか?
0629仕様書無しさん
垢版 |
2020/07/16(木) 17:59:37.31
競プロに必要な数学を先取りしてる中高生なら多々
0630仕様書無しさん
垢版 |
2020/07/16(木) 18:20:18.29
今の中学生は怖いわ
K近傍法とか知ってるやつもいるみたいだし
0631仕様書無しさん
垢版 |
2020/07/16(木) 19:00:36.59
>>611
僕も反応してくれる人いないだろうなーと思って質問したので、
反応してくれる人がいて嬉しいです

なるほど、確かにINFやMODは値を書き換えることがあるので一番下が良さそうですね
今のところ、定数を使う関数はありませんし…

・型定義では vector を使っているので、「using namespace std;」<「型定義」
・関数定義や定数定義で型定義を利用しているので、「型定義」<「関数定義、定数定義」
・インクルードやマクロはプリプロセッサが処理するので、最初に書く
・更に bits/stdc++.h よりも自作マクロを優先させたいので、「include」<「マクロ」
・最も書き換え頻度の多いので、定数定義は最後に書く

以上の理由から、>>605の順序が一番良さそうです

>>622
了解です
0632仕様書無しさん
垢版 |
2020/07/16(木) 19:12:55.27
競プロのおかげでヨビノリの期待値の動画やグラフ理論の動画が理解できるようになったから
数学が得意になったといえる
0633仕様書無しさん
垢版 |
2020/07/16(木) 19:15:14.57
競プロじゃあんま関係ないがヘッダファイルをたくさんincludeするときトポソ順にやるかその逆順でやるかというのがある
0635仕様書無しさん
垢版 |
2020/07/16(木) 20:41:59.79
棋聖に勝てる将棋AIを0から作れるなら認めてやってもいいぞ
0636仕様書無しさん
垢版 |
2020/07/16(木) 20:45:45.20
ラズパイみたいなのの計算力で藤井くん倒そうみたいなのは丁度よさそうな目標なんだよな
もう勝てるのかは知らない
0637仕様書無しさん
垢版 |
2020/07/16(木) 21:21:36.70
1からプログラム書いて勝てるなら偉業だから頑張ってくれ
0638仕様書無しさん
垢版 |
2020/07/16(木) 21:32:46.74
>>633
逆順でするの面白いです
調べてみると、「依存ファイルのインクルードを忘れたのにコンパイルが通ってしまう」
という事態を避けるためらしいですね
競プロでは意識する必要はなさそうです

関係ないですけど、競プロer同士だと「トポソ」の三文字だけで意思疎通できるのが面白いです
競プロする理由が自分でもわからなかったけど、
もしかすると好きな競プロerさんと意思疎通したいとかそういう理由なのかも
あまり「競プロそのもの」をする目的は考えないほうがいいかもしれません
(たとえば就職に役立つとか数学が強くなるとかお金になるとか)
0639仕様書無しさん
垢版 |
2020/07/16(木) 21:36:44.90
将棋も金融も保険もアルゴリズム力は関係あるけど、atcoderの算数パズル問題とは遠いっすよ
0640仕様書無しさん
垢版 |
2020/07/17(金) 00:37:04.90
トポソ=トポロジカルソートか
競プロerだけど初めて知った
0641仕様書無しさん
垢版 |
2020/07/17(金) 01:33:53.36
藤井聡太とかものすごい天才だと思うけど日本でしかやってないボードゲームの天才ってどうなんだろうと思ってしまう。touristやりんごさんも同じ。他のことやってればどうだったんだろう。
研究者だったなら人類のフロンティアに貢献できるけど、解ける問題を作って解いてって虚しくならないものなのかな?間接的には大きな影響を与えてるだろうけど。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況