AtCoderNotesForBeginners

Show some knowledges for beginners on AtCoder.

  1. // ==UserScript==
  2. // @name AtCoderNotesForBeginners
  3. // @namespace https://github.com/AwashAmityOak
  4. // @version 0.2.1
  5. // @description Show some knowledges for beginners on AtCoder.
  6. // @author AwashAmityOak
  7. // @license MIT
  8. // @match https://atcoder.jp/contests/*/tasks/*
  9. // @grant none
  10. // @copyright 2024 AwashAmityOak (https://github.com/AwashAmityOak)
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. "use strict";
  15.  
  16. const getTypeSizeTable = () => {
  17. const table = document.createElement("table");
  18. table.classList.add("table");
  19. table.classList.add("table-bordered");
  20. table.classList.add("table-striped");
  21. table.innerHTML = `
  22. <thead>
  23. <tr>
  24. <th>型</th>
  25. <th>範囲</th>
  26. </tr>
  27. </thead>
  28. <tbody>
  29. <tr>
  30. <td><code>int</code></td>
  31. <td>
  32. <var>-2^{31}, \\ldots, 2^{31}-1</var>
  33. <var>(-2 \\times 10^9, \\ldots, 2 \\times 10^9)</var>
  34. </td>
  35. </tr>
  36. <tr>
  37. <td><code>long long</code></td>
  38. <td>
  39. <var>-2^{63}, \\ldots, 2^{63}-1</var>
  40. <var>(-9 \\times 10^{18}, \\ldots, 9 \\times 10^{18})</var>
  41. </td>
  42. </tr>
  43. </tbody>
  44. `;
  45. table.querySelectorAll("var").forEach(e=>{
  46. e.innerHTML = "\\(" + e.innerHTML + "\\)";
  47. });
  48. renderMathInElement(table, katexOptions);
  49. return table;
  50. };
  51.  
  52. const getTimeComplexityTable = () => {
  53. const table = document.createElement("table");
  54. table.classList.add("table");
  55. table.classList.add("table-bordered");
  56. table.classList.add("table-striped");
  57. table.innerHTML = `
  58. <thead>
  59. <tr>
  60. <th>入力サイズ</th>
  61. <th>時間計算量</th>
  62. </tr>
  63. </thead>
  64. <tbody>
  65. <tr>
  66. <td><var>N \\leq 10</var></td>
  67. <td><var>O(N!)</var></td>
  68. </tr>
  69. <tr>
  70. <td><var>N \\leq 20</var></td>
  71. <td><var>O(2^N)</var></td>
  72. </tr>
  73. <tr>
  74. <td><var>N \\leq 50</var></td>
  75. <td><var>O(N^4)</var></td>
  76. </tr>
  77. <tr>
  78. <td><var>N \\leq 500</var></td>
  79. <td><var>O(N^3)</var></td>
  80. </tr>
  81. <tr>
  82. <td><var>N \\leq 5000</var></td>
  83. <td><var>O(N^2)</var></td>
  84. </tr>
  85. <tr>
  86. <td><var>N \\leq 10^5</var></td>
  87. <td><var>O(N)</var> or <var>O(N \\log N)</var></td>
  88. </tr>
  89. <tr>
  90. <td><var>10^5 < N</var></td>
  91. <td><var>O(\\log N)</var> or <var>O(1)</var></td>
  92. </tr>
  93. </tbody>
  94. `;
  95. table.querySelectorAll("var").forEach(e=>{
  96. e.innerHTML = "\\(" + e.innerHTML + "\\)";
  97. });
  98. renderMathInElement(table, katexOptions);
  99. return table;
  100. };
  101.  
  102. const elements = document.querySelectorAll(".part > section");
  103. for (const parent of elements) {
  104. if (parent.innerHTML.indexOf("制約") == -1) {
  105. continue;
  106. }
  107.  
  108. const typeSizeElement = document.createElement("details");
  109. typeSizeElement.appendChild((() => {
  110. const s = document.createElement("summary");
  111. s.innerHTML = "型のサイズ";
  112. return s;
  113. })());
  114. const typeSizeTable = getTypeSizeTable();
  115. typeSizeTable.style.marginTop = "5px";
  116. typeSizeTable.style.marginBottom = "5px";
  117. typeSizeElement.appendChild(typeSizeTable);
  118. typeSizeElement.style.marginBottom = "10px";
  119. parent.appendChild(typeSizeElement);
  120.  
  121. const timeComplexityElement = document.createElement("details");
  122. timeComplexityElement.appendChild((() => {
  123. const s = document.createElement("summary");
  124. s.innerHTML = "時間計算量";
  125. return s;
  126. })());
  127. const timeComplexityTable = getTimeComplexityTable();
  128. timeComplexityTable.style.marginTop = "5px";
  129. timeComplexityTable.style.marginBottom = "5px";
  130. timeComplexityElement.appendChild(timeComplexityTable);
  131. parent.appendChild(timeComplexityElement);
  132. }
  133. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址