Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add : solved ABC250(virtual) #193

Merged
merged 1 commit into from
Sep 12, 2022
Merged

add : solved ABC250(virtual) #193

merged 1 commit into from
Sep 12, 2022

Conversation

HirokiYoshida837
Copy link
Owner

image

@HirokiYoshida837
Copy link
Owner Author

ABC250

  • A : 場合分けが結構面倒。問通りに配列つくって、配列外参照しないのであればカウントするをして無理やり実装。
  • B : 実装が結構たいへん。1,-1でタイルを表す配列を作って、それをもとに文字列を組み立てる。
  • C : 各番号のボールがどこにいるかを保持するMapと、全体の並びを表す配列の2つをつかってうまく高速化
  • D : 適当にググッて出たエラストテネスの篩を貼ったらTLEしたので実装しなおし。

@HirokiYoshida837
Copy link
Owner Author

ABC250C

  • 各番号のボールが今どこにいるかを表すDictionaryを作成 Dictionary<int,int>
  • いまのフィールドのボールの状態を表す配列を作成 array[n+1] (1indexedにした)
  • クエリで指定された番号のボールの位置をdicから取得
    • array[dic[x]+1] と array[dic[x]] をswap
    • array[dic[x]-1] と array[dic[x]] をswap
    • swap後は、dicの値をそれぞれ更新。

を繰り返す。

swapの処理はtupleをつかってうまくできる。

@HirokiYoshida837
Copy link
Owner Author

ABC250D

考察

  • 3乗して10^8 -> 必要な素数は、最大でも 10^6 になるはず。
  • 10^6 までの素数をエラストテネスの篩を使って事前にもとめておく
  • 求めた素数を二重ループを使って p*q^3 を計算してHashSetに突っ込んでいく
  • HashSetの値を出力

@HirokiYoshida837
Copy link
Owner Author

HirokiYoshida837 commented Sep 12, 2022

ABC250Dは、このままだと計算時間がかかる。(p*q^3 を全部計算していく必要がある)。実際、1900msなのでTLEギリギリ。(どこかの実装が結構わるいのも影響してる)

  • あるqについて、pが取りうる最大値は Math.min(q-1, n/q^3) のはず。
  • これでpの最大値が求まったので、二分探索で素数のリストから、最大値以下の個数がいくつあるかを探せる
  • q^3 * p は、重複しないはずなので、HashSetで重複管理しなくても、そのまま個数を足し込んでいけばよい。

で高速化できる。 (110msまで高速化した)

@HirokiYoshida837 HirokiYoshida837 merged commit 67fad71 into Main Sep 12, 2022
@HirokiYoshida837
Copy link
Owner Author

HirokiYoshida837 commented Sep 12, 2022

バチャで解いたけどそれなりに緊張感あったので面白かった。

パフォーマンス的には1100くらい。A、Bで時間を溶かしすぎた。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant