Greasy Fork 还支持 简体中文。

AtCoderTags_Helper

AtCoderTagsへのTag投票を、AtCoder問題ページからTagを選ぶだけで投票できるようにします。

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         AtCoderTags_Helper
// @version      2.7
// @author       Null_Null
// @match        https://atcoder.jp/contests/*/tasks/*
// @match        https://*/tasks/*
// @grant        none
// @namespace    https://github.com/null-null-programming/AtCoderTags-Helper
// @description  AtCoderTagsへのTag投票を、AtCoder問題ページからTagを選ぶだけで投票できるようにします。
// ==/UserScript==

$('#copyright').append(`
<style>
    #atcoder-tags-helper > select {
        display: inline-block;
        vertical-align: top;
        width: 230px;
        margin: 0px 5px;
    }
</style>

<div id="atcoder-tags-helper" class="form-inline" style="padding-top: 5rem">
    <select id="tag_parent" class="form-control" name="tag" size="18">
        <option data-subgroup="Easy" value="Easy">Easy</option>
        <option data-subgroup="Ad-Hoc" value="Ad-Hoc">Ad-Hoc</option>
        <option data-subgroup="Searching" value="Searching">Searching</option>
        <option data-subgroup="Greedy-Methods" value="Greedy-Methods">Greedy-Methods</option>
        <option data-subgroup="String" value="String">String</option>
        <option data-subgroup="Mathematics" value="Mathematics">Mathematics</option>
        <option data-subgroup="Technique" value="Technique">Technique</option>
        <option data-subgroup="Construct" value="Construct">Construct</option>
        <option data-subgroup="Graph" value="Graph">Graph</option>
        <option data-subgroup="Dynamic-Programming" value="Dynamic-Programming">Dynamic-Programming</option>
        <option data-subgroup="Data-Structure" value="Data-Structure">Data-Structure</option>
        <option data-subgroup="Game" value="Game">Game</option>
        <option data-subgroup="Flow-Algorithms" value="Flow-Algorithms">Flow-Algorithms</option>
        <option data-subgroup="Geometry" value="Geometry">Geometry</option>
        <option data-subgroup="Interactive" value="Interactive">Interactive</option>
        <option data-subgroup="April-Fool" value="April-Fool">April-Fool</option>
        <option data-subgroup="Marathon" value="Marathon">Marathon</option>
        <option data-subgroup="Other" value="Other">Other</option>
    </select>

    <select id="tag_child" class="form-control" name="tag2" size="18">
        <option data-group="Searching" value="Brute-Force">全探索</option>
        <option data-group="Searching" value="Binary-Search">二分探索</option>
        <option data-group="Searching" value="Ternary-Search">三分探索</option>
        <option data-group="Searching" value="DFS">深さ優先探索</option>
        <option data-group="Searching" value="BFS">幅優先探索</option>
        <option data-group="Searching" value="Bit-Brute-Force">bit全探索</option>
        <option data-group="Searching" value="Heuristic">ヒューリスティック</option>
        <option data-group="Searching" value="Other">その他</option>

        <option data-group="String" value="String-Operation">文字列処理</option>
        <option data-group="String" value="Rolling-Hash">ローリングハッシュ</option>
        <option data-group="String" value="Manacher">Manacher</option>
        <option data-group="String" value="Suffix-Array">Suffix-Array</option>
        <option data-group="String" value="Z-Algorithm">Z-Algorithm</option>
        <option data-group="String" value="Trie">Trie</option>
        <option data-group="String" value="Parsing">構文解析</option>
        <option data-group="String" value="Other">その他</option>

        <option data-group="Mathematics" value="Number">整数</option>
        <option data-group="Mathematics" value="Combinatorics">組み合わせ</option>
        <option data-group="Mathematics" value="Enumerate">数え上げ</option>
        <option data-group="Mathematics" value="Probability">確率</option>
        <option data-group="Mathematics" value="Expected-Value">期待値</option>
        <option data-group="Mathematics" value="Matrix">行列</option>
        <option data-group="Mathematics" value="XOR">XOR</option>
        <option data-group="Mathematics" value="Other">その他</option>

        <option data-group="Technique" value="Sort">ソート</option>
        <option data-group="Technique" value="Simulation">シミュレーション</option>
        <option data-group="Technique" value="Cumulative-Sum">累積和</option>
        <option data-group="Technique" value="imos">imos法</option>
        <option data-group="Technique" value="Two-Pointers">尺取り法</option>
        <option data-group="Technique" value="Recursion">再帰関数</option>
        <option data-group="Technique" value="Compress">座標圧縮</option>
        <option data-group="Technique" value="Split-And-List">半分全列挙</option>
        <option data-group="Technique" value="Square-Division">平方分割</option>
        <option data-group="Technique" value="Divide-And-Conquer">分割統治法</option>
        <option data-group="Technique" value="Doubling">ダブリング</option>
        <option data-group="Technique" value="Randomized-Algorithm">乱択アルゴリズム</option>
        <option data-group="Technique" value="Other">その他</option>

        <option data-group="Graph" value="Shortest-Path">最短経路</option>
        <option data-group="Graph" value="Minimum-Spanning-Tree">最小全域木</option>
        <option data-group="Graph" value="LCA">最小共通祖先</option>
        <option data-group="Graph" value="Strongly-Connected-Components">強連結成分分解</option>
        <option data-group="Graph" value="Topological-Sort">トポロジカルソート</option>
        <option data-group="Graph" value="Euler-Tour">オイラーツアー</option>
        <option data-group="Graph" value="Euler-Path-and-Hamilton-Path">オイラーパス・ハミルトンパス</option>
        <option data-group="Graph" value="HL-Decomposition">HL分解</option>
        <option data-group="Graph" value="Centroid-Decomposition">重心分解</option>
        <option data-group="Graph" value="Check-Tree">木の同型判定</option>
        <option data-group="Graph" value="Kirchhoff">行列木定理</option>
        <option data-group="Graph" value="Two-Edge-Connected-Components">二重辺連結成分分解</option>
        <option data-group="Graph" value="Bi-Connected-Components">二重頂点連結成分分解</option>
        <option data-group="Graph" value="Cycle-Basis">サイクル基底</option>
        <option data-group="Graph" value="dfs-tree">dfs木</option>
        <option data-group="Graph" value="Erdesh">エルデシュガライの定理</option>
        <option data-group="Graph" value="Other">その他</option>

        <option data-group="Dynamic-Programming" value="Simple-DP">基礎DP</option>
        <option data-group="Dynamic-Programming" value="Restore-DP">戻すDP</option>
        <option data-group="Dynamic-Programming" value="String-DP">文字列DP</option>
        <option data-group="Dynamic-Programming" value="Section-DP">区間DP</option>
        <option data-group="Dynamic-Programming" value="Digit-DP">桁DP</option>
        <option data-group="Dynamic-Programming" value="Tree-DP">木DP</option>
        <option data-group="Dynamic-Programming" value="Every-Direction-DP">全方位木DP</option>
        <option data-group="Dynamic-Programming" value="Bit-DP">bitDP</option>
        <option data-group="Dynamic-Programming" value="Probability-DP">確率DP</option>
        <option data-group="Dynamic-Programming" value="Expected-Value-DP">期待値DP</option>
        <option data-group="Dynamic-Programming" value="Insert-DP">挿入DP</option>
        <option data-group="Dynamic-Programming" value="Link-DP">連結DP</option>
        <option data-group="Dynamic-Programming" value="Inline-DP">インラインDP</option>
        <option data-group="Dynamic-Programming" value="Matrix-Power">行列累乗</option>
        <option data-group="Dynamic-Programming" value="CHT">Convex-Hull-Trick</option>
        <option data-group="Dynamic-Programming" value="Monge-DP">Monge-DP</option>
        <option data-group="Dynamic-Programming" value="Alien-DP">Alien-DP</option>
        <option data-group="Dynamic-Programming" value="Kitamasa">きたまさ法</option>
        <option data-group="Dynamic-Programming" value="Other">その他</option>

        <option data-group="Data-Structure" value="stack">stack</option>
        <option data-group="Data-Structure" value="queue">queue</option>
        <option data-group="Data-Structure" value="set">set</option>
        <option data-group="Data-Structure" value="map">map</option>
        <option data-group="Data-Structure" value="deque">deque</option>
        <option data-group="Data-Structure" value="multiset">multiset</option>
        <option data-group="Data-Structure" value="priority_queue">priority_queue</option>
        <option data-group="Data-Structure" value="Union-Find-Tree">Union-Find-Tree</option>
        <option data-group="Data-Structure" value="BIT">Binary-Indexed-Tree</option>
        <option data-group="Data-Structure" value="Segment-Tree">Segment-Tree</option>
        <option data-group="Data-Structure" value="Lazy-Segment-Tree">Lazy-Segment-Tree</option>
        <option data-group="Data-Structure" value="Sparse-Table">Sparse-Table</option>
        <option data-group="Data-Structure" value="WaveletMatrix">WaveletMatrix</option>
        <option data-group="Data-Structure" value="Persistent-Data-Structures">永続データ構造</option>
        <option data-group="Data-Structure" value="Balanced-Tree">平衡二分探索木</option>
        <option data-group="Data-Structure" value="Other">その他</option>

        <option data-group="Game" value="Nim">Nim</option>
        <option data-group="Game" value="Grundy">Grundy数</option>
        <option data-group="Game" value="Backtrack">後退解析</option>
        <option data-group="Game" value="Mini-Max">ミニマックス法</option>
        <option data-group="Game" value="unique">特殊な性質</option>
        <option data-group="Game" value="Other">その他</option>

        <option data-group="Flow-Algorithms" value="Max-Flow">最大流問題</option>
        <option data-group="Flow-Algorithms" value="Min-Cost-Flow">最小費用流問題</option>
        <option data-group="Flow-Algorithms" value="Bipartite-Matching">二部マッチング</option>
        <option data-group="Flow-Algorithms" value="Min-Cut">最小カット</option>
        <option data-group="Flow-Algorithms" value="Burn">燃やす埋める</option>
        <option data-group="Flow-Algorithms" value="Other">その他</option>

        <option data-group="Geometry" value="Convex-Hull">凸包</option>
        <option data-group="Geometry" value="Declination-Sorting">偏角ソート</option>
        <option data-group="Geometry" value="Voronoi-Diagram">ボロノイ図</option>
        <option data-group="Geometry" value="Three-D">三次元</option>
        <option data-group="Geometry" value="Other">その他</option>
    </select>
    <br>
    <br>

    <input id="atcoder_tag_vote" type="submit" value="Submit" class="btn btn-primary">
</div>
`);

function getContestName() {
  const contestURL = location.href;
  const contestArray = contestURL.split('/');
  return contestArray[contestArray.length - 1];
}

function enableNestedChoice(parentSelect, childSelect) {
  $(parentSelect).change(function () {
    var subgroup = $(this).find('option:selected').attr('data-subgroup');

    $(childSelect).find("option").each(function (index, element) {
      var group = $(element).attr('data-group');

      if (subgroup === group) {
        $(element).show();
      } else {
        $(element).hide();
      }
    });

    $(childSelect).val('').change();
  });
}

$('#atcoder_tag_vote').click(function () {
  const parent_tag = $('#tag_parent').val();
  const child_tag = $('#tag_child').val();
  const problem_id = getContestName();

  const url = `https://atcoder-tags.herokuapp.com/vote_result?problem_id=${problem_id}&tag=${parent_tag}&tag2=${child_tag}`;
  window.open(url);
});

enableNestedChoice('#tag_parent', '#tag_child');

$('#tag_parent').val('').change();
$('#tag_child').val('').change();