2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

天才にしか解けない激ムズアルゴリズムパズルがこちらww

1 :以下、?ちゃんねるからVIPがお送りします:2022/02/13(日) 23:14:31.204 ID:J/Mu/tsG0.net
n枚のカードがあり、i番目のカードの表には整数a_i、裏には整数b_iが書いてある

n枚のカードをいくつか裏返して並べて、最大何種類の整数を表に出来るか?

90 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 01:23:15.675 ID:dyyPYDEaa.net
>>89
グループ数がまるまる表示出来るとは限らないよ
例えば
[1,2] [2,3]
なんかが反例

{1,2,3}はグループだけど
上のばあい2種類しか表示できない

91 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 01:27:00.862 ID:OBL6jtkO0.net
>>89
[1,3] [1,3] [1,4] [2,3]
だとグループ数4ぼっち数2だけど実際には4種類表示できる

92 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 01:54:02.690 ID:zAMccW1/M.net
少し改善。この方向???

0.面倒なので正の整数としても良い
1.最大の整数分の配列a[], b[]を用意。最大の正整数が65536ならa[65536]的なのを用意。a[]の初期値は0
2.a_iをa[a_i]=a[a_i]+1として格納
3.b_iをb[i]=b_iとして格納。複数ある場合は複数順番に格納
4.a[p]≠0の場合、a[b_p]=0ならa[b_p]=1とし、a[p]=a[p]-1とする。b[p]の要素数分だけ繰り返し
5.a[x]≠0の数を数える

例1:
a_i={1, 1, 1, 2}, b_i={3, 3 ,4 ,3}
2.a[]={3, 1, 0, 0,...}
3.b[]={(3, 3, 4), 3, 0, 0,...}
4.a[]={1, 1, 1 ,1}
ans=4

例2:
a_i={3, 2, 2, 4, 1, 3}, b_i={2, 3, 6, 3, 5, 3}
2.a[]={1, 2, 2, 1, 0, 0,...},
3.b[]={5, (3,6), (2, 3), 3, 0, 0,...}
4.a[]={0, 1, 2, 1, 1, 1,...},
ans=5

93 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 01:56:29.362 ID:dyyPYDEaa.net
>>92
ありがとう
今からキチンと検証します

94 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:02:47.313 ID:dyyPYDEaa.net
>>92
3番目ってbそのものと変わらないものを用意しろってこと?

95 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:02:58.643 ID:zAMccW1/M.net
>>93
眠いぃぃぃ、正解もお願いします!

96 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:03:45.232 ID:dyyPYDEaa.net
2番目は
aの辞書を作っているイメージだよね
iがaの中に何個ありますか?という

97 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:04:03.374 ID:dyyPYDEaa.net
>>95
じゃあ正解はります

98 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:04:32.291 ID:zAMccW1/M.net
>>94
部分集合も含めるとbの順番を入れ替えたもの。

99 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:04:50.392 ID:dyyPYDEaa.net
まずa_iとb_iを頂点として、それらを辺で結ぶグラフを考えます
例えば

100 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:05:15.645 ID:zAMccW1/M.net
>>96
そそ、超プリミティブなハッシュ的な

101 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:06:44.742 ID:dyyPYDEaa.net
[1,2]、[2,3]、[3,1]、[3,4]、[5,6]なら
こんな感じのグラフ
https://o.5ch.net/1whwb.png

102 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:08:26.418 ID:dyyPYDEaa.net
>>101
このグラフのそれぞれの連結成分について、
もし木(サイクルを持たないグラフ)であるなら「頂点数-1」
木でないなら「頂点数」
をカウントしてそれらを足せば答えになります

103 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:09:40.967 ID:dyyPYDEaa.net
>>101
のケースなら
左のグラフは木じゃないグラフなので
頂点数-1=4-1=3

右のグラフは木なので
頂点数=2

これらを足して3+2=5
がマックスになる

104 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:10:55.285 ID:zAMccW1/M.net
>>102
ありがとう!
天才っすな
キモの1つは、裏表区別しなくていいってところか

105 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:10:57.946 ID:dyyPYDEaa.net
アルゴリズムとしてはUnion find等を使い、グラフの連結成分を調べればおkです

106 :以下、?ちゃんねるからVIPがお送りします:2022/02/14(月) 02:12:16.889 ID:dyyPYDEaa.net
>>104
おっしゃる通り

今回の問題は
このグラフにおいてそれぞれの辺の両端のどちらか片方を光らせることが出来る電飾が付いていると思って、最大何個電気を付けられるのか
という問題と同じになります

総レス数 106
27 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200