C++ の動作確認をしてみた(658)

C++の練習を兼ねて, JOI 2021/2022 本選 過去問 の 問題A (インターカステラー (Intercastellar)) を解いてみた.

■感想.
1. 問題Aは, 方針を絞り込めたので, AC版に到達できたので十分だと思う.
2. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.

本家のサイト JOI 2021/2022 本選 過去問 解説 の 各リンク を ご覧下さい.

■C++版プログラム(問題A/AC版).

■参照サイト
JOI 2021/2022 本選 過去問

C++ の動作確認をしてみた(657)

C++の練習を兼ねて, AtCoder Beginner Contest 225 の 問題C (Calendar Validator) ~ 問題D (Play Train) を解いてみた.

■感想.
1. 問題C, Dは, 方針を絞り込めたので, AC版に到達できたと思う.
2. 問題D で, 標準ライブラリ std::deque を利用するロジックが, 非常に面白いと感じた.
3. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.

本家のサイト AtCoder Beginner Contest 225 解説 の 各リンク を ご覧下さい.

■C++版プログラム(問題C/AC版).

■C++版プログラム(問題D/AC版).

■参照サイト
UNICORNプログラミングコンテスト2021(AtCoder Beginner Contest 225)

C++ の動作確認をしてみた(656)

C++の練習を兼ねて, AtCoder Regular Contest 135 の 問題C (XOR to All) を解いてみた.

■感想.
1. 問題Cは, 方針が見えなかったので, 解説を参考に, AC版に到達できたと思う.
2. 個人的には, 一括して数え上げるロジックが, 非常に面白いと感じた.
3. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.

本家のサイト AtCoder Regular Contest 135 解説 の 各リンク を ご覧下さい.

■C++版プログラム(問題C/AC版).

■参照サイト
AtCoder Regular Contest 135

Python(Qiskit)について(20)

概要

  • Qiskit について, 学習サイト の サンプルプログラムを動かしてみた.
  • 動作環境は, 学習サイト上 で行った
  • 実行プログラム, 解説は, 下記の参照サイトをご覧ください

感想

  1. ベルンシュタイン・ヴァジラニ アルゴリズムの演算方法で, 量子オラクルについて確認してみた.
  2. 5 ~ 6量子ビットで確認したが出力結果が改行されなかったので, wbrタグを手動埋め込みし改行させて確認している.
  3. 下記の (参考)シミュレーターでの実験 の通り, ベルンシュタイン・ヴァジラニ アルゴリズム の プログラム内に, 秘密の文字列を反転する操作が実装されており, 個人的には, 手計算前に, 秘密の文字列 を 反転させる操作 と 符合すると予想する.
  4. 演習問題では, 10量子ビット(“1110110101”)での記述もあったが, 実行後に, エラー(Too large to display)となったため, 詳細は確認できなかったが, 5 ~ 6量子ビットで確認出来たので, 十分だと思う.

ベルンシュタイン・ヴァジラニ アルゴリズム(演習問題改題ほか)

  1. 量子オラクル(5量子ビット “10011”)
  2. [手計算]

    [結果]
    手計算との一致を確認できた.

     


  3. 量子オラクル(6量子ビット “010110”)
  4. [手計算]

    [結果]
    手計算との一致を確認できた.

     


  5. (参考)量子オラクル(10量子ビット “1110110101”)
  6. [結果]
    エラー出力された.

     


  7. (参考)シミュレーターでの実験
  8. 公式サイトでは, 秘密の文字列 “011” で, シミュレーターによる実験を見ることが出来る.
    ⇒ プログラム中に, 以下の実装箇所があるが, これをコメントアウト(秘密の文字列の反転を行わない)して, 結果を確認してみる.

    [結果]
    シミュレーター の 結果が, 秘密の文字列 “110” で, 出力されることを確認できた.

     


参照サイト

C++ の動作確認をしてみた(655)

C++の練習を兼ねて, AtCoder Beginner Contest 127 の 問題E (Cell Distance) を解いてみた.

■感想.
1. 問題Eは, 方針が見えなかったので, 解説を参考に, AC版に到達できたと思う.
2. 個人的には, 解説にある通り, X, Y方向で, 独立に数え上げできるという部分が, 面白く感じた.
3. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.

本家のサイト AtCoder Beginner Contest 127 解説 を ご覧下さい.

■C++版プログラム(問題E/AC版).

■参照サイト
AtCoder Beginner Contest 127

Python(Qiskit)について(19)

概要

  • Qiskit について, 学習サイト の サンプルプログラムを動かしてみた.
  • 動作環境は, 学習サイト上 で行った
  • 実行プログラム, 解説は, 下記の参照サイトをご覧ください

感想

  1. ベルンシュタイン・ヴァジラニ アルゴリズムの演算方法で, 量子オラクルについて確認してみた.
  2. 既に, 学習環境が用意されており, 数値を書き換えるなどして試行錯誤もできるので, 個人的には, 非常に面白く感じた.

ベルンシュタイン・ヴァジラニ アルゴリズム

  1. 量子オラクル(1量子ビット “1”)
  2. [手計算]

    [結果]
    手計算との一致を確認できた.

     


  3. 量子オラクル(2量子ビット “01”)
  4. [手計算]

    [結果]
    手計算との一致を確認できた.

     


  5. 量子オラクル(3量子ビット “110”)
  6. [手計算]

    [結果]
    手計算との一致を確認できた.

     


  7. 量子オラクル(4量子ビット “1011”)
  8. [手計算]

    [結果]
    手計算との一致を確認できた.

     


参照サイト

C++ の動作確認をしてみた(654)

C++の練習を兼ねて, AtCoder Beginner Contest 234 の 問題F (Reordering) を解いてみた.

■感想.
1. 問題Fは, 方針が見えなかったので, 解説を参考に, AC版に到達できたと思う.
2. 苦手な動的計画法の訓練を積めたので, 非常に良かったと思う.
3. 個人的には, 数え上げする種類数が, アルファベットの出現数にのみ依存するという部分が, 不思議な印象を受けた.
4. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.

本家のサイト AtCoder Beginner Contest 234 解説 の 各リンク を ご覧下さい.

■C++版プログラム(問題F/AC版).

■参照サイト
AtCoder Beginner Contest 234

C++ の動作確認をしてみた(653)

C++の練習を兼ねて, AtCoder Beginner Contest 237 の 問題E (Skiing) を解いてみた.

■感想.
1. 問題Eは, 方針が見えなかったので, 解説を参考に, AC版に到達できたと思う.
2. ダイクストラ法(応用版)の復習が出来たので, 非常に良かったと思う.
3. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.

本家のサイト AtCoder Beginner Contest 237 解説 の 各リンク を ご覧下さい.

■C++版プログラム(問題E/AC版).

■参照サイト
AtCoder Beginner Contest 237

C++ の動作確認をしてみた(652)

C++の練習を兼ねて, AtCoder Beginner Contest 085 の 問題D (Katana Thrower) を解いてみた.

■感想.
1. 問題Dは, 方針が見えなかったので, 解説を参考に, AC版に到達できたと思う.
2. 個人的には, 解説にあるロジック(投げ刀, 強い投げ刀, 振り刀に分けて考える)が, 非常に面白く感じた.
3. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.

本家のサイト AtCoder Beginner Contest 085 解説 を ご覧下さい.

■C++版プログラム(問題D/AC版).

■参照サイト
AtCoder Beginner Contest 085

C++ の動作確認をしてみた(651)

C++の練習を兼ねて, AtCoder Beginner Contest 142 の 問題E (Get Everything) を解いてみた.

■感想.
1. 問題Eは, 方針が見えなかったので, 解説を参考に, AC版に到達できたと思う.
2. 苦手な動的計画法の訓練を積めたので, 非常に良かったと思う.
3. 最初, TLE版で実装したが, 計算量の削減方法が分からず, dp更新式に渡す鍵情報を, AtCoder Beginner Contest 142 (解説プログラム)を参考に修正している.
4. 個人的には, 動的計画法に関する理解を, 深めることが出来たように感じた.
現状, TLE版 と AC版 との違いは, 本質的には, 鍵情報の捉え方の違いにあると理解している.
→ 具体的には, 鍵情報が, {宝箱1, 宝箱2, 宝箱3} だった場合に, TLE版では, {宝箱1}, {宝箱2}, {宝箱3}, {宝箱1, 宝箱2}, {宝箱1, 宝箱3}, {宝箱2, 宝箱3}, {宝箱1, 宝箱2, 宝箱3} の 7通りの鍵情報で, dp更新を行っているが, AC版では, {宝箱1, 宝箱2, 宝箱3} の 1通りの鍵情報で, dp計算を行っているため, 計算量に違いが現れたと理解している.
→ さらに, TLE版 と AC版 は, dp配列 の 途中部分は, 差分が生じるものの, 最終的に必要な情報は, すべての宝箱を, 開けることが出来るかどうか(および, 最小費用)であるため, 各鍵毎に, 常に, 1通りの鍵情報(ここでは, {宝箱1, 宝箱2, 宝箱3})を見れば十分という点について, なるほどと, 改めて感じた.
5. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.

本家のサイト AtCoder Beginner Contest 142 解説 の 各リンク を ご覧下さい.

■C++版プログラム(問題E/TLE版).

■C++版プログラム(問題E/AC版).

■参照サイト
AtCoder Beginner Contest 142
AtCoder Beginner Contest 142 (解説プログラム)