atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
早稲田大学チームvivid_turtle 知見共有@ ウィキ
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • 早稲田大学チームvivid_turtle 知見共有@ ウィキ
  • ARC092-D

早稲田大学チームvivid_turtle 知見共有@ ウィキ

ARC092-D

最終更新:2019年09月26日 01:34

vivid_turtle

- view
メンバー限定 登録/ログイン

ARC092-D Two Sequences (500)


問題文:
https://atcoder.jp/contests/arc092/tasks/arc092_b

検索用

ビットごと 二分探索

概要

N(最大20万)長の、要素ごとが2^28まである二つの数列a, bについて、以下のansを求めよ。
ll ans = 0;
 
for(int i = 0; i < N; i++){
    for(int j = 0; j < N; j++){
        ans ^= (a[i] + b[j]);
    }
}
 
cout << ans << endl;
 

ACするまで


1.どうせbitごとに見るんだろうなと予想
2.見てる桁が0-idxで下からk桁目の時、
a_i + b_ j (mod 2^(k+1)) で 2^k より大きければ、その桁のbitは立つ。最終的にそれの数を合計して、XORするので奇数個あったら答えの部分のk bit目は立つ。
3.つまり2^kが立つような組み合わせを爆速で数えたいなぁ



4.実は2の式をもっと詰めるときれいに1になる区間と0になる区間がわかる。
5. 4のこれの境界がわかれば個数が分かる。->二分探索

考察


この問題で、kビット目について考えるとき、ひとまずaもbもmod 2^(k+1)で考える。なぜならば、それより上の桁はkビット目のXORの結果に影響しないからである。

ここを詰め切れなかったのだが、aとbの和の大小関係によって、bitが立つかどうか、次の式のようになる。

  • [0, 2^k) 2^kの位に届かないので、立たない。
  • [2^k, 2 * 2^k) 2^(k+1)の位には届かないので、2^kの位は立つ。
  • [2 * 2^k, 3 * 2^k) 2^(k+1)の位が立つので、2^kの位がいったん0になる。よって立たない。
  • [3 * 2^k, 4 * 2^k) 2^(k+1)の位が立つうえで、2^kの位もたつ。よって立つ。

このようにa+bのkビット目が立つか立たないかはどの連続した区間に属するかに依る。区間の境界は二分探索!と相場は大体決まってる。

あとは事前にaとbのmod 2^(k+1)を事前計算して、aを決めた時に境界となる値をb内で二分探索して、個数を数え上げればいい。区間の定義が半開区間なので、lower_bound()同士のイテレータの差で個数が分かる。

ソースコード

https://atcoder.jp/contests/arc092/submissions/7689435
「ARC092-D」をウィキ内検索
LINE
シェア
Tweet
早稲田大学チームvivid_turtle 知見共有@ ウィキ
記事メニュー

メニュー

  • トップページ
  • プラグイン紹介
  • メニュー
  • 右メニュー
  • アルゴリズム別知見
  • 個別問題知見



リンク

  • @wiki
  • @wikiご利用ガイド




ここを編集
記事メニュー2

更新履歴

取得中です。


ここを編集
人気記事ランキング
  1. 区間DP
  2. DPの加速方法(非データ構造)
  3. 転倒数への帰着
  4. グリッド上での数え上げ
  5. bitsetでの定数倍改善
  6. 2次元座標と二部グラフ
  7. プラグイン/ニュース
もっと見る
最近更新されたページ
  • 1503日前

    bitsetでの定数倍改善
  • 2117日前

    しゃくとりの大原則
  • 2117日前

    アルゴリズム別知見
  • 2120日前

    グリッド上の構築
  • 2121日前

    ARC096-D
  • 2121日前

    ARC092-D
  • 2121日前

    個別問題知見
  • 2125日前

    ダブリングの使い所さん
  • 2131日前

    文字列と動的計画法
  • 2131日前

    数え上げのDPのさまざま(知らなかったこと)
もっと見る
人気記事ランキング
  1. 区間DP
  2. DPの加速方法(非データ構造)
  3. 転倒数への帰着
  4. グリッド上での数え上げ
  5. bitsetでの定数倍改善
  6. 2次元座標と二部グラフ
  7. プラグイン/ニュース
もっと見る
最近更新されたページ
  • 1503日前

    bitsetでの定数倍改善
  • 2117日前

    しゃくとりの大原則
  • 2117日前

    アルゴリズム別知見
  • 2120日前

    グリッド上の構築
  • 2121日前

    ARC096-D
  • 2121日前

    ARC092-D
  • 2121日前

    個別問題知見
  • 2125日前

    ダブリングの使い所さん
  • 2131日前

    文字列と動的計画法
  • 2131日前

    数え上げのDPのさまざま(知らなかったこと)
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. AviUtl2のWiki
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  6. ソードランページ @ 非公式wiki
  7. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  8. ドラゴンボール Sparking! ZERO 攻略Wiki
  9. 星飼いの詩@ ウィキ
  10. ヒカマーWiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. 発車メロディーwiki
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. 英傑大戦wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. モンスター一覧_第2章 - モンスター烈伝オレカバトル2@wiki
  3. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  4. 高崎線 - 発車メロディーwiki
  5. 近藤旬子 - 馬主データベース@Wiki
  6. 地獄のデザイナーさん1 - 【トレパク】 きりつき 検証まとめwiki 【地獄のデザイナーさん】
  7. 召喚 - PATAPON(パタポン) wiki
  8. 細田守 - アニヲタWiki(仮)
  9. ステージ攻略 - パタポン2 ドンチャカ♪@うぃき
  10. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.