<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Ryan&#39;s blog</title>
  
  
  <link href="https://blog.ryankert.cc/atom.xml" rel="self"/>
  
  <link href="https://blog.ryankert.cc/"/>
  <updated>2024-04-22T17:07:33.635Z</updated>
  <id>https://blog.ryankert.cc/</id>
  
  <author>
    <name>Ryan Kert</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>UVA - 12911 Subset Sum</title>
    <link href="https://blog.ryankert.cc/2023/01/31/data_structure/uva-12911/"/>
    <id>https://blog.ryankert.cc/2023/01/31/data_structure/uva-12911/</id>
    <published>2023-01-31T22:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Intuition"><a href="#Intuition" class="headerlink" title="Intuition"></a>Intuition</h2><p>If we try to use brute-force algorithm to solve this problem, we will find <code>O(2^n)</code> in complexity. But, since max of <code>n</code> is 40, it’s too long to pass. Namely, $2^{40}\sim 10^{12}$. Also, although it looks like a dynamic programming problem, it’s not working either.</p><p>Surprisingly, it’s easier than I thought. All we have to do is divide it into half. That way, the complexity will became $2^{n&#x2F;2}+2^{n&#x2F;2}$, which has a maximum of $2^{20}+2^{20}&#x3D;2^{21}\sim 2*10^{6}$.</p><p>But, that only include time of 2 brute-force divide. We have to also conquer it. There’s the procedure,</p><ol><li>devide all numbers into nums1, nums2 equaly</li><li>nums1 -&gt; map1 (possible sum, combinations), also, nums2 -&gt; map2.</li><li>for each map1 value, find a value in map2 that satisfy <code>val1 + val2 = target</code>.</li></ol><div class="note info">            <h4 id="combinations"><a href="#combinations" class="headerlink" title="combinations"></a>combinations</h4><p>how many combinations in nums1 can construct that sum</p>          </div><p>Therefore, we get the total complexity is $Time&#x3D;2*2^{n}*lg(2^n)+2^{n}*lg(2^n)&#x3D;{3}*2^{n}*n$ , where n has a maximum of 20. Namely, we obtain the worse case run time is<br>$$O_w({3}*2^{n}*n)&#x3D;{3}*2^{20}*20\sim {6}*10^7$$</p><h2 id="Sample-Code"><a href="#Sample-Code" class="headerlink" title="Sample Code:"></a>Sample Code:</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"></span><br><span class="line">ll n, target, res;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">build_mp</span><span class="params">(vector&lt;ll&gt; &amp;nums, unordered_map&lt;ll, ll&gt; &amp;mp)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    ll m = <span class="number">1</span> &lt;&lt; nums.<span class="built_in">size</span>();</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; m; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        ll sum = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (ll j = <span class="number">0</span>; j &lt; nums.<span class="built_in">size</span>(); j++)</span><br><span class="line">            <span class="keyword">if</span> ((<span class="number">1</span> &lt;&lt; j) &amp; i)</span><br><span class="line">                sum += nums[j];</span><br><span class="line">        mp[sum]++;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; n &gt;&gt; target)</span><br><span class="line">    &#123;</span><br><span class="line">        ll bpt = n / <span class="number">2</span>;</span><br><span class="line">        res = <span class="number">0</span>;</span><br><span class="line">        <span class="function">vector&lt;ll&gt; <span class="title">nums1</span><span class="params">(bpt)</span>, <span class="title">nums2</span><span class="params">(n - bpt)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; nums1.<span class="built_in">size</span>(); i++)</span><br><span class="line">            cin &gt;&gt; nums1[i];</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; nums2.<span class="built_in">size</span>(); i++)</span><br><span class="line">            cin &gt;&gt; nums2[i];</span><br><span class="line">        unordered_map&lt;ll, ll&gt; mp1, mp2;</span><br><span class="line">        <span class="built_in">build_mp</span>(nums1, mp1);</span><br><span class="line">        <span class="built_in">build_mp</span>(nums2, mp2);</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it : mp1)</span><br><span class="line">        &#123;</span><br><span class="line">            ll goal = target - it.first;</span><br><span class="line">            <span class="keyword">if</span> (mp2.<span class="built_in">find</span>(goal) != mp2.<span class="built_in">end</span>())</span><br><span class="line">                res += it.second * mp2[goal];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">// when target == 0, (none) set cannot exist, while (0,0) is okay.</span></span><br><span class="line">        <span class="keyword">if</span> (target == <span class="number">0</span>)</span><br><span class="line">            res--;</span><br><span class="line">        cout &lt;&lt; res &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Intuition&quot;&gt;&lt;a href=&quot;#Intuition&quot; class=&quot;headerlink&quot; title=&quot;Intuition&quot;&gt;&lt;/a&gt;Intuition&lt;/h2&gt;&lt;p&gt;If we try to use brute-force algorithm to </summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/categories/Algorithm/CPE/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/tags/CPE/"/>
    
  </entry>
  
  <entry>
    <title>UVA - 11659 Informant</title>
    <link href="https://blog.ryankert.cc/2023/01/27/data_structure/uva-11659/"/>
    <id>https://blog.ryankert.cc/2023/01/27/data_structure/uva-11659/</id>
    <published>2023-01-27T13:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Intuition"><a href="#Intuition" class="headerlink" title="Intuition"></a>Intuition</h2><p>Since the total informant can only be up to 20, we can use an integer to represent if it’s reliable by :</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">reliable table</span><br><span class="line">00001 : A is reliable</span><br><span class="line">00010 : B is reliable</span><br><span class="line">00110 : B and C is reliable</span><br><span class="line">...etc.</span><br></pre></td></tr></table></figure><p>So as the unreliables.</p><h3 id="Brute-force-pull-out-every-possibilities"><a href="#Brute-force-pull-out-every-possibilities" class="headerlink" title="Brute force : pull out every possibilities"></a>Brute force : pull out every possibilities</h3><p>Since we discover that n informant has to represent with n bits, the full range of the possibles is $0$ ~ $2^n-1$ with it represented in <code>int</code>.</p><p>And per possibilities, we have to verify it with every informant that is reliable to tell if it’s a valid possible reliable informants allocation.</p><p>Therefore, we can calculate a time complexity of:<br>$$O(2^N*N)$$<br>Where $N$ is the number of informants. Since $N$ has maximum value of <code>20</code>, it cost at most $2^{20}*20 \sim {2}*10^7$, which will not TLE at most judge.</p><h2 id="Sample-Code"><a href="#Sample-Code" class="headerlink" title="Sample Code"></a>Sample Code</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> nums[<span class="number">21</span>], fnums[<span class="number">21</span>];</span><br><span class="line">    <span class="type">int</span> n, m;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; n &gt;&gt; m &amp;&amp; n)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="comment">// reset</span></span><br><span class="line">        <span class="built_in">memset</span>(nums, <span class="number">0</span>, <span class="built_in">sizeof</span>(nums));</span><br><span class="line">        <span class="built_in">memset</span>(fnums, <span class="number">0</span>, <span class="built_in">sizeof</span>(fnums));</span><br><span class="line">        <span class="comment">// handle input</span></span><br><span class="line">        <span class="type">int</span> x, y;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            cin &gt;&gt; x &gt;&gt; y;</span><br><span class="line">            <span class="keyword">if</span> (y &gt; <span class="number">0</span>)</span><br><span class="line">                nums[x - <span class="number">1</span>] |= <span class="number">1</span> &lt;&lt; y - <span class="number">1</span>;</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                fnums[x - <span class="number">1</span>] |= <span class="number">1</span> &lt;&lt; -y - <span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">// solve</span></span><br><span class="line">        <span class="type">int</span> hightest = (<span class="number">1</span> &lt;&lt; n), res = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; hightest; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="type">int</span> now = __builtin_popcount(i), ni = (~i);</span><br><span class="line">            <span class="keyword">if</span> (res &gt;= now)</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            <span class="type">bool</span> flag = <span class="literal">true</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; n; j++)</span><br><span class="line">                <span class="keyword">if</span> ((i &amp; (<span class="number">1</span> &lt;&lt; j)) &amp;&amp; ((fnums[j] &amp; ni) != fnums[j] || (nums[j] &amp; i) != nums[j]))</span><br><span class="line">                &#123;</span><br><span class="line">                    flag = <span class="literal">false</span>;</span><br><span class="line">                    <span class="keyword">break</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            <span class="keyword">if</span> (flag)</span><br><span class="line">                res = now;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; res &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Intuition&quot;&gt;&lt;a href=&quot;#Intuition&quot; class=&quot;headerlink&quot; title=&quot;Intuition&quot;&gt;&lt;/a&gt;Intuition&lt;/h2&gt;&lt;p&gt;Since the total informant can only be up t</summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/categories/Algorithm/CPE/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/tags/CPE/"/>
    
  </entry>
  
  <entry>
    <title>UVA - 1640 The Counting Problem</title>
    <link href="https://blog.ryankert.cc/2023/01/26/data_structure/uva-1640/"/>
    <id>https://blog.ryankert.cc/2023/01/26/data_structure/uva-1640/</id>
    <published>2023-01-26T21:30:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Observation"><a href="#Observation" class="headerlink" title="Observation"></a>Observation</h2><p>This problem gives us two numbers, <code>num1</code>, <code>num2</code>.<br>Suppose <code>num1 &lt; num2</code>, although might be arbitrary.<br>Therefore, it’s actually calculate <code>0 ~ num2</code> - <code>0 ~ num1</code> in every number.</p><h2 id="The-Problem-Calculate-1-num"><a href="#The-Problem-Calculate-1-num" class="headerlink" title="The Problem : Calculate 1 ~ num"></a>The Problem : Calculate <code>1 ~ num</code></h2><p>To calculate various numbers in <code>1 ~ num</code>, I use 3 steps. Let <code>b</code> be the maximum that satisfy <code>num / pow(10,b) &gt; 0</code>.</p><ol><li>calculate <code>1 ~ pow(10,b)-1</code>, or <code>1 ~ 999...99</code>, we can recursively solve this by use <code>count_numbers(pow(10,b)-1)</code>.</li><li>calculate the midst of the number, or <code>10...00 ~ X0...00 - 1</code>, where X is the leading number of <code>num</code>.</li><li>calculate the back, or <code>X0...00 ~ num</code></li></ol><h2 id="Sample-Code"><a href="#Sample-Code" class="headerlink" title="Sample Code"></a>Sample Code</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> INF 99999999</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> MAXN 1e8</span></span><br><span class="line"><span class="type">int</span> base[<span class="number">9</span>] = &#123;<span class="number">0</span>, <span class="number">1</span>, <span class="number">20</span>, <span class="number">300</span>, <span class="number">4000</span>, <span class="number">50000</span>, <span class="number">600000</span>, <span class="number">7000000</span>, <span class="number">80000000</span>&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;res, <span class="type">int</span> num)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (num == <span class="number">0</span>)</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; v;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> temp = num; temp; temp /= <span class="number">10</span>)</span><br><span class="line">        v.<span class="built_in">push_back</span>(temp % <span class="number">10</span>);</span><br><span class="line">    <span class="built_in">reverse</span>(v.<span class="built_in">begin</span>(), v.<span class="built_in">end</span>());</span><br><span class="line">    <span class="type">int</span> b = v.<span class="built_in">size</span>() - <span class="number">1</span>;</span><br><span class="line">    <span class="comment">// front : (0 ~ 999...99]</span></span><br><span class="line">    <span class="built_in">solve</span>(res, <span class="built_in">pow</span>(<span class="number">10</span>, b) - <span class="number">1</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">// middle :  100...0 ~ x00...0 - 1</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; res.<span class="built_in">size</span>(); j++)</span><br><span class="line">        res[j] += (v[<span class="number">0</span>] - <span class="number">1</span>) * base[b];</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> j = v[<span class="number">0</span>] - <span class="number">1</span>; j &gt; <span class="number">0</span>; j--)</span><br><span class="line">        res[j] += <span class="built_in">pow</span>(<span class="number">10</span>, b);</span><br><span class="line">    <span class="comment">// back :  num % pow(10,b)</span></span><br><span class="line">    <span class="comment">// int bNum = num % (int)pow(10,b);</span></span><br><span class="line">    res[v[<span class="number">0</span>]] += (num % (<span class="type">int</span>)<span class="built_in">pow</span>(<span class="number">10</span>, b)) + <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt; v.<span class="built_in">size</span>(); i++)</span><br><span class="line">    &#123;</span><br><span class="line">        b--;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; res.<span class="built_in">size</span>(); j++)</span><br><span class="line">            res[j] += v[i] * base[b];</span><br><span class="line"></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; v[i]; j++)</span><br><span class="line">            res[j] += <span class="built_in">pow</span>(<span class="number">10</span>, b);</span><br><span class="line">        res[v[i]] += (num % (<span class="type">int</span>)<span class="built_in">pow</span>(<span class="number">10</span>, b)) + <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> num1, num2;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; num1 &gt;&gt; num2 &amp;&amp; num1 &amp;&amp; num2)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span> (num1 &gt; num2)</span><br><span class="line">            <span class="built_in">swap</span>(num1, num2);</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">res1</span><span class="params">(<span class="number">10</span>, <span class="number">0</span>)</span></span>;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">res2</span><span class="params">(<span class="number">10</span>, <span class="number">0</span>)</span></span>;</span><br><span class="line">        <span class="built_in">solve</span>(res1, num1 - <span class="number">1</span>);</span><br><span class="line">        <span class="built_in">solve</span>(res2, num2);</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; res1.<span class="built_in">size</span>(); i++)</span><br><span class="line">        &#123;</span><br><span class="line">            cout &lt;&lt; res2[i] - res1[i];</span><br><span class="line">            <span class="keyword">if</span> (i != res1.<span class="built_in">size</span>() - <span class="number">1</span>)</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Observation&quot;&gt;&lt;a href=&quot;#Observation&quot; class=&quot;headerlink&quot; title=&quot;Observation&quot;&gt;&lt;/a&gt;Observation&lt;/h2&gt;&lt;p&gt;This problem gives us two numbers,</summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/categories/Algorithm/CPE/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/tags/CPE/"/>
    
  </entry>
  
  <entry>
    <title>UVA - 10326 The Polynomial Equation</title>
    <link href="https://blog.ryankert.cc/2023/01/24/data_structure/uva-10326/"/>
    <id>https://blog.ryankert.cc/2023/01/24/data_structure/uva-10326/</id>
    <published>2023-01-24T21:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Intuition"><a href="#Intuition" class="headerlink" title="Intuition"></a>Intuition</h2><p>We are told to micmic the polynomial multiplication. Such as, $(x-1)(x-1)&#x3D;x^2-2x+1$, etc.<br>So, if you do it correctly, it would be correct.</p><p>p.s. You should use <code>long long</code> in this question.</p><h2 id="Sample-Code"><a href="#Sample-Code" class="headerlink" title="Sample Code"></a>Sample Code</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">addPoly</span><span class="params">(vector&lt;ll&gt; &amp;poly1, vector&lt;ll&gt; &amp;poly2, ll val = <span class="number">1</span>, <span class="type">int</span> shift = <span class="number">0</span>)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="function">vector&lt;ll&gt; <span class="title">res</span><span class="params">(max(poly1.size(), poly2.size() + shift), <span class="number">0</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; poly1.<span class="built_in">size</span>(); i++)</span><br><span class="line">        res[i] = poly1[i];</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; poly2.<span class="built_in">size</span>(); i++)</span><br><span class="line">        res[i + shift] += poly2[i] * val;</span><br><span class="line">    poly1 = res;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">multiply</span><span class="params">(vector&lt;ll&gt; &amp;poly1, vector&lt;ll&gt; &amp;poly2)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="function">vector&lt;ll&gt; <span class="title">res</span><span class="params">(poly1.size() + poly2.size(), <span class="number">0</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; poly2.<span class="built_in">size</span>(); i++)</span><br><span class="line">        <span class="built_in">addPoly</span>(res, poly1, poly2[i], i);</span><br><span class="line">    poly1 = res;</span><br><span class="line">    <span class="keyword">while</span> (poly1.<span class="built_in">back</span>() == <span class="number">0</span>)</span><br><span class="line">        poly1.<span class="built_in">pop_back</span>();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; n)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="function">vector&lt;ll&gt; <span class="title">res</span><span class="params">(<span class="number">1</span>, <span class="number">1</span>)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="function">vector&lt;ll&gt; <span class="title">temp</span><span class="params">(<span class="number">2</span>, <span class="number">1</span>)</span></span>;</span><br><span class="line">            cin &gt;&gt; temp[<span class="number">0</span>];</span><br><span class="line">            temp[<span class="number">0</span>] = -temp[<span class="number">0</span>];</span><br><span class="line">            <span class="built_in">multiply</span>(res, temp);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">for</span> (ll i = res.<span class="built_in">size</span>() - <span class="number">1</span>; i &gt;= <span class="number">0</span>; i--)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span> (!i)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span> (i == res.<span class="built_in">size</span>() - <span class="number">1</span>)</span><br><span class="line">                    ;</span><br><span class="line">                <span class="keyword">else</span> <span class="keyword">if</span> (res[i] &gt;= <span class="number">0</span>)</span><br><span class="line">                    cout &lt;&lt; <span class="string">&quot; + &quot;</span>;</span><br><span class="line">                <span class="keyword">else</span></span><br><span class="line">                &#123;</span><br><span class="line">                    cout &lt;&lt; <span class="string">&quot; - &quot;</span>;</span><br><span class="line">                    res[i] = -res[i];</span><br><span class="line">                &#125;</span><br><span class="line">                cout &lt;&lt; res[i];</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (!res[i] || i == res.<span class="built_in">size</span>() - <span class="number">1</span>)</span><br><span class="line">                ;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span> (res[i] &lt; <span class="number">0</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot; - &quot;</span>;</span><br><span class="line">                res[i] = -res[i];</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span> (res[i] &gt; <span class="number">0</span>)</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot; + &quot;</span>;</span><br><span class="line"></span><br><span class="line">            <span class="keyword">if</span> (res[i] &gt; <span class="number">1</span>)</span><br><span class="line">                cout &lt;&lt; res[i];</span><br><span class="line">            <span class="keyword">if</span> (res[i])</span><br><span class="line">            &#123;</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;x&quot;</span>;</span><br><span class="line">                <span class="keyword">if</span> (i &gt; <span class="number">1</span>)</span><br><span class="line">                    cout &lt;&lt; <span class="string">&quot;^&quot;</span> &lt;&lt; i;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot; = 0\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Intuition&quot;&gt;&lt;a href=&quot;#Intuition&quot; class=&quot;headerlink&quot; title=&quot;Intuition&quot;&gt;&lt;/a&gt;Intuition&lt;/h2&gt;&lt;p&gt;We are told to micmic the polynomial multi</summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/categories/Algorithm/CPE/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/tags/CPE/"/>
    
  </entry>
  
  <entry>
    <title>UVA - 12627 Erratic Expansion</title>
    <link href="https://blog.ryankert.cc/2023/01/24/data_structure/uva-12627/"/>
    <id>https://blog.ryankert.cc/2023/01/24/data_structure/uva-12627/</id>
    <published>2023-01-24T21:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Observation"><a href="#Observation" class="headerlink" title="Observation"></a>Observation</h2><p>From <code>row8</code> to <code>row1</code>, We can find an interesting fact : if we assign id <code>1 ~ 8</code> to <code>row 8 ~ row 1</code>, respectfully. Let’s say the red balloon in id i is <code>bal[i]</code>. We can get a interesting formula <code>bal[i] = bal[i/2]*2</code>.</p><p>Also, $\sum^{2^n}bal[i]$ can be respresent as $3^{n-1}$.</p><h2 id="Intuition"><a href="#Intuition" class="headerlink" title="Intuition"></a>Intuition</h2><p>We can also see $\sum^{M}bal[i]$ in a very different way that can provide time complexity to <code>O(log(n))</code>: Use $\sum^{2^n}bal[i] &#x3D; 3^{n-1}$</p><p>That is, compute $\sum^{M}bal[i] &#x3D; \sum^{2^{x_1}}bal[i] + \sum^{2^{x_2}}bal[i] + … + \sum^{2^{x_k}}bal[i]$, where $M&#x3D;2^{x_1}+2^{x_2}+…+2^{x_k}$.</p><h2 id="Sample-Code"><a href="#Sample-Code" class="headerlink" title="Sample Code"></a>Sample Code</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> INF 99999999</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="function">vector&lt;ll&gt; <span class="title">dp</span><span class="params">(<span class="number">31</span>, <span class="number">1</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= <span class="number">30</span>; i++)</span><br><span class="line">        dp[i] = dp[i - <span class="number">1</span>] * <span class="number">3</span>;</span><br><span class="line">    <span class="type">int</span> n, tt = <span class="number">0</span>;</span><br><span class="line">    cin &gt;&gt; n;</span><br><span class="line">    <span class="keyword">while</span> (n--)</span><br><span class="line">    &#123;</span><br><span class="line">        ll k, a, b;</span><br><span class="line">        cin &gt;&gt; k &gt;&gt; a &gt;&gt; b;</span><br><span class="line">        a = (ll)(<span class="number">1</span> &lt;&lt; k) - a + <span class="number">1</span>;</span><br><span class="line">        b = (ll)(<span class="number">1</span> &lt;&lt; k) - b;</span><br><span class="line">        ll a1 = <span class="number">0</span>, b1 = <span class="number">0</span>, t = <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">30</span>; i &gt;= <span class="number">0</span>; i--)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span> ((a &gt;&gt; i) &amp; <span class="number">1</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                a1 += dp[i] * t;</span><br><span class="line">                t = t &lt;&lt; <span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        t = <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">30</span>; i &gt;= <span class="number">0</span>; i--)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span> ((b &gt;&gt; i) &amp; <span class="number">1</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                b1 += dp[i] * t;</span><br><span class="line">                t = t &lt;&lt; <span class="number">1</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Case &quot;</span> &lt;&lt; ++tt &lt;&lt; <span class="string">&quot;: &quot;</span> &lt;&lt; (a1 - b1) &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Observation&quot;&gt;&lt;a href=&quot;#Observation&quot; class=&quot;headerlink&quot; title=&quot;Observation&quot;&gt;&lt;/a&gt;Observation&lt;/h2&gt;&lt;p&gt;From &lt;code&gt;row8&lt;/code&gt; to &lt;code&gt;ro</summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/categories/Algorithm/CPE/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/tags/CPE/"/>
    
  </entry>
  
  <entry>
    <title>UVA - 437 The Tower of Babylon</title>
    <link href="https://blog.ryankert.cc/2023/01/23/data_structure/uva-437/"/>
    <id>https://blog.ryankert.cc/2023/01/23/data_structure/uva-437/</id>
    <published>2023-01-23T21:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Intuition"><a href="#Intuition" class="headerlink" title="Intuition"></a>Intuition</h2><p>Contruct a tower of Babylon use <code>Blocks</code>.<br>Since <code>Blocks</code> can be flip, we got 6 different cases with one type of block.<br>Put them into a vector, sort them, and it’s a simple <a href="https://www.ryankert.cc/AlgoKert/dynamic-programming/300.html">LIS problem</a>.</p><p>p.s. One difference from typical LIS problem is that it’s wants maximum height.</p><h2 id="Example-Code"><a href="#Example-Code" class="headerlink" title="Example Code :"></a>Example Code :</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> mpb(x, y, z) v.push_back(&#123;x, y, z&#125;)</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> tt = <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; n &amp;&amp; n)</span><br><span class="line">    &#123;</span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; v;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; n; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="type">int</span> x, y, z;</span><br><span class="line">            cin &gt;&gt; x &gt;&gt; y &gt;&gt; z;</span><br><span class="line">            <span class="built_in">mpb</span>(x, y, z);</span><br><span class="line">            <span class="built_in">mpb</span>(x, z, y);</span><br><span class="line">            <span class="built_in">mpb</span>(y, x, z);</span><br><span class="line">            <span class="built_in">mpb</span>(y, z, x);</span><br><span class="line">            <span class="built_in">mpb</span>(z, x, y);</span><br><span class="line">            <span class="built_in">mpb</span>(z, y, x);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">sort</span>(v.<span class="built_in">begin</span>(), v.<span class="built_in">end</span>());</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(v.size() + <span class="number">1</span>, <span class="number">0</span>)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; v.<span class="built_in">size</span>(); i++)</span><br><span class="line">        &#123;</span><br><span class="line">            dp[i] = v[i][<span class="number">2</span>];</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; i; j++)</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span> (v[i][<span class="number">0</span>] &gt; v[j][<span class="number">0</span>] &amp;&amp; v[i][<span class="number">1</span>] &gt; v[j][<span class="number">1</span>])</span><br><span class="line">                    dp[i] = <span class="built_in">max</span>(dp[i], dp[j] + v[i][<span class="number">2</span>]);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> res = *<span class="built_in">max_element</span>(dp.<span class="built_in">begin</span>(), dp.<span class="built_in">end</span>());</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Case &quot;</span> &lt;&lt; ++tt &lt;&lt; <span class="string">&quot;: maximum height = &quot;</span> &lt;&lt; res &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Intuition&quot;&gt;&lt;a href=&quot;#Intuition&quot; class=&quot;headerlink&quot; title=&quot;Intuition&quot;&gt;&lt;/a&gt;Intuition&lt;/h2&gt;&lt;p&gt;Contruct a tower of Babylon use &lt;code&gt;Bloc</summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/categories/Algorithm/CPE/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/tags/CPE/"/>
    
  </entry>
  
  <entry>
    <title>2022/12/13 CPE</title>
    <link href="https://blog.ryankert.cc/2023/01/22/data_structure/cpe20221213/"/>
    <id>https://blog.ryankert.cc/2023/01/22/data_structure/cpe20221213/</id>
    <published>2023-01-22T19:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="UVA-10931-Parity"><a href="#UVA-10931-Parity" class="headerlink" title="UVA-10931 Parity"></a>UVA-10931 Parity</h2><p>A simply bit-wise operation.</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    ll x;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; x &amp;&amp; x)</span><br><span class="line">    &#123;</span><br><span class="line">        ll res = <span class="number">0</span>;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;The parity of &quot;</span>;</span><br><span class="line">        <span class="type">bool</span> y = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">32</span>; i &gt;= <span class="number">0</span>; i--)</span><br><span class="line">            <span class="keyword">if</span> ((x &gt;&gt; i) &amp; <span class="number">1</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                res++;</span><br><span class="line">                cout &lt;&lt; <span class="number">1</span>;</span><br><span class="line">                y = <span class="literal">true</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span> (y)</span><br><span class="line">                cout &lt;&lt; <span class="number">0</span>;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot; is &quot;</span> &lt;&lt; res &lt;&lt; <span class="string">&quot; (mod 2).\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="UVA-10789-Prime-Frequency"><a href="#UVA-10789-Prime-Frequency" class="headerlink" title="UVA-10789 Prime Frequency"></a>UVA-10789 Prime Frequency</h2><p>Since every case can only put 2001 size of string, I just pre-calculate every case.(from exist 1 ~ 2001 times).<br>Then, use map to calculate individual alphabat exist n times, and it will auto sort too.</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">bool</span> nums[<span class="number">2002</span>];</span><br><span class="line">    nums[<span class="number">0</span>] = nums[<span class="number">1</span>] = <span class="literal">false</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">2</span>; i &lt; <span class="number">2002</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        nums[i] = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="built_in">sqrt</span>(i); j &gt; <span class="number">1</span>; j--)</span><br><span class="line">            <span class="keyword">if</span> (i % j == <span class="number">0</span>)</span><br><span class="line">                nums[i] = <span class="literal">false</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> t, n;</span><br><span class="line">    cin &gt;&gt; t;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; t; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Case &quot;</span> &lt;&lt; i + <span class="number">1</span> &lt;&lt; <span class="string">&quot;: &quot;</span>;</span><br><span class="line">        string s;</span><br><span class="line">        cin &gt;&gt; s;</span><br><span class="line">        map&lt;<span class="type">char</span>, <span class="type">int</span>&gt; mp;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">char</span> c : s)</span><br><span class="line">            mp[c]++;</span><br><span class="line">        <span class="type">bool</span> isEmpty = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> it : mp)</span><br><span class="line">            <span class="keyword">if</span> (nums[it.second])</span><br><span class="line">            &#123;</span><br><span class="line">                isEmpty = <span class="literal">false</span>;</span><br><span class="line">                <span class="keyword">if</span> (it.first &lt; <span class="number">10</span>)</span><br><span class="line">                    cout &lt;&lt; <span class="built_in">int</span>(it.first);</span><br><span class="line">                <span class="keyword">else</span></span><br><span class="line">                    cout &lt;&lt; it.first;</span><br><span class="line">            &#125;</span><br><span class="line">        <span class="keyword">if</span> (isEmpty)</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;empty&quot;</span>;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="UVA-10903-Rock-Paper-Scissors-Tournament"><a href="#UVA-10903-Rock-Paper-Scissors-Tournament" class="headerlink" title="UVA-10903 Rock-Paper-Scissors Tournament"></a>UVA-10903 Rock-Paper-Scissors Tournament</h2><p>Firstly, I define rock paper scissors to 0,1,2, respectfully. (call it <code>t1</code>, <code>t2</code>, for person 1, 2, respectfully.)<br>We observed that this game has 3^2 &#x3D; 9 ways to perform, to get result.<br>To get result, I use a 3*3 matrix to store result, 1 for win, -1 for loss, 0 for even.<br><code>result = pos[t1][t2]</code>, so to speak.<br>Then, I put result into arrays ,and therefore get answers we wanted.</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123; <span class="comment">// rock scissors paper</span></span><br><span class="line">    map&lt;string, <span class="type">int</span>&gt; mp;</span><br><span class="line">    mp[<span class="string">&quot;rock&quot;</span>] = <span class="number">0</span>;</span><br><span class="line">    mp[<span class="string">&quot;scissors&quot;</span>] = <span class="number">1</span>;</span><br><span class="line">    mp[<span class="string">&quot;paper&quot;</span>] = <span class="number">2</span>;</span><br><span class="line">    <span class="type">int</span> pos[<span class="number">3</span>][<span class="number">3</span>] = &#123;&#123;<span class="number">0</span>, <span class="number">1</span>, <span class="number">-1</span>&#125;, &#123;<span class="number">-1</span>, <span class="number">0</span>, <span class="number">1</span>&#125;, &#123;<span class="number">1</span>, <span class="number">-1</span>, <span class="number">0</span>&#125;&#125;;</span><br><span class="line">    <span class="type">int</span> n, k;</span><br><span class="line">    <span class="type">bool</span> start = <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; n &amp;&amp; n)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span> (start)</span><br><span class="line">            start = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            cout &lt;&lt; endl;</span><br><span class="line">        cin &gt;&gt; k;</span><br><span class="line">        <span class="type">int</span> games = k * (n * (n - <span class="number">1</span>)) / <span class="number">2</span>;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">pw</span><span class="params">(n + <span class="number">1</span>, <span class="number">0</span>)</span></span>; <span class="comment">// players win times</span></span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">pl</span><span class="params">(n + <span class="number">1</span>, <span class="number">0</span>)</span></span>; <span class="comment">// loses</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; games; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="type">int</span> p1, p2, t1, t2;</span><br><span class="line">            string s1, s2;</span><br><span class="line">            cin &gt;&gt; p1 &gt;&gt; s1 &gt;&gt; p2 &gt;&gt; s2;</span><br><span class="line">            t1 = mp[s1];</span><br><span class="line">            t2 = mp[s2];</span><br><span class="line">            <span class="keyword">if</span> (pos[t1][t2] == <span class="number">0</span>)</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span> (pos[t1][t2] == <span class="number">1</span>)</span><br><span class="line">                pw[p1]++, pl[p2]++;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span> (pos[t1][t2] == <span class="number">-1</span>)</span><br><span class="line">                pw[p2]++, pl[p1]++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span> (pw[i] + pl[i] == <span class="number">0</span>)</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;-\n&quot;</span>;</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                cout &lt;&lt; fixed &lt;&lt; <span class="built_in">setprecision</span>(<span class="number">3</span>) &lt;&lt; ((<span class="type">double</span>)pw[i] / (<span class="type">double</span>)(pw[i] + pl[i])) &lt;&lt; endl;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="UVA-10336-Rank-the-Languages"><a href="#UVA-10336-Rank-the-Languages" class="headerlink" title="UVA-10336 Rank the Languages"></a>UVA-10336 Rank the Languages</h2><p>This is trying to find numbers of component in a map.<br>So we apply simply dfs on it.</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;vector&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;map&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> dir[<span class="number">5</span>] = &#123;<span class="number">0</span>, <span class="number">-1</span>, <span class="number">0</span>, <span class="number">1</span>, <span class="number">0</span>&#125;;</span><br><span class="line"><span class="type">int</span> m, n;</span><br><span class="line">vector&lt;vector&lt;<span class="type">char</span>&gt;&gt; v;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> y)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (v[x][y] == <span class="number">0</span>)</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    <span class="type">char</span> val = v[x][y];</span><br><span class="line">    v[x][y] = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">4</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> nx = x + dir[i];</span><br><span class="line">        <span class="type">int</span> ny = y + dir[i + <span class="number">1</span>];</span><br><span class="line">        <span class="keyword">if</span> (nx &gt;= <span class="number">0</span> &amp;&amp; nx &lt; m &amp;&amp; ny &gt;= <span class="number">0</span> &amp;&amp; ny &lt; n &amp;&amp; v[nx][ny] == val)</span><br><span class="line">            <span class="built_in">dfs</span>(nx, ny);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> t;</span><br><span class="line">    cin &gt;&gt; t;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> cnt = <span class="number">1</span>; cnt &lt;= t; cnt++)</span><br><span class="line">    &#123;</span><br><span class="line">        cin &gt;&gt; m &gt;&gt; n;</span><br><span class="line">        v.<span class="built_in">resize</span>(m, <span class="built_in">vector</span>&lt;<span class="type">char</span>&gt;(n));</span><br><span class="line">        map&lt;<span class="type">char</span>, <span class="type">int</span>&gt; mp;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++)</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; n; j++)</span><br><span class="line">                cin &gt;&gt; v[i][j];</span><br><span class="line">        <span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++)</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; n; j++)</span><br><span class="line">                <span class="keyword">if</span> (v[i][j] != <span class="number">0</span>)</span><br><span class="line">                    mp[v[i][j]]++, <span class="built_in">dfs</span>(i, j);</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;World #&quot;</span> &lt;&lt; cnt &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">        vector&lt;pair&lt;<span class="type">int</span>, <span class="type">char</span>&gt;&gt; ans;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> &amp;it : mp)</span><br><span class="line">            ans.<span class="built_in">push_back</span>(<span class="built_in">make_pair</span>(it.second, it.first));</span><br><span class="line">        <span class="built_in">sort</span>(</span><br><span class="line">            ans.<span class="built_in">begin</span>(), ans.<span class="built_in">end</span>(), [](<span class="type">const</span> pair&lt;<span class="type">int</span>, <span class="type">char</span>&gt; &amp;it1, <span class="type">const</span> pair&lt;<span class="type">int</span>, <span class="type">char</span>&gt; &amp;it2) -&gt; <span class="type">bool</span></span><br><span class="line">            &#123;</span><br><span class="line">            <span class="keyword">if</span>(it1.first != it2.first)</span><br><span class="line">                <span class="keyword">return</span> it1.first &gt; it2.first;</span><br><span class="line">            <span class="keyword">return</span> it1.second &lt; it2.second; &#125;);</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> &amp;it : ans)</span><br><span class="line">            cout &lt;&lt; it.second &lt;&lt; <span class="string">&quot;: &quot;</span> &lt;&lt; it.first &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="UVA-11584-Partitioning-by-Palindrome"><a href="#UVA-11584-Partitioning-by-Palindrome" class="headerlink" title="UVA-11584 Partitioning by Palindrome"></a>UVA-11584 Partitioning by Palindrome</h2><p>same leetcode question: <a href="https://leetcode.com/problems/palindrome-partitioning-ii/description/">132. Palindrome Partitioning II</a></p><p>We use Dynamic Programming to address this problem.<br>That is, <code>dp[i]</code> means from <code>s[0]</code> to <code>s[i-1]</code>, the minimum partition.<br>Therefore, <code>dp[s.size()]</code> or <code>dp.back()</code> is the result.</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> INF 999999</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> t;</span><br><span class="line">    cin &gt;&gt; t;</span><br><span class="line">    <span class="keyword">while</span> (t--)</span><br><span class="line">    &#123;</span><br><span class="line">        string s;</span><br><span class="line">        cin &gt;&gt; s;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(s.size() + <span class="number">1</span>)</span></span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt;= s.<span class="built_in">size</span>(); i++)</span><br><span class="line">            dp[i] = i; <span class="comment">// that is, dp 1 ~ s.size() is s: 0 ~ s.size()-1</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt; s.<span class="built_in">size</span>(); i++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="comment">// even numbers of characters kind of palindrome</span></span><br><span class="line">            <span class="type">int</span> x = i - <span class="number">1</span>, y = i;</span><br><span class="line">            <span class="keyword">while</span> (x &gt;= <span class="number">0</span> &amp;&amp; y &lt; s.<span class="built_in">size</span>() &amp;&amp; s[x] == s[y])</span><br><span class="line">            &#123;</span><br><span class="line">                dp[y + <span class="number">1</span>] = <span class="built_in">min</span>(dp[y + <span class="number">1</span>], dp[x] + <span class="number">1</span>);</span><br><span class="line">                x--, y++;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="comment">// odd</span></span><br><span class="line">            x = y = i;</span><br><span class="line">            <span class="keyword">while</span> (x &gt;= <span class="number">0</span> &amp;&amp; y &lt; s.<span class="built_in">size</span>() &amp;&amp; s[x] == s[y])</span><br><span class="line">            &#123;</span><br><span class="line">                dp[y + <span class="number">1</span>] = <span class="built_in">min</span>(dp[y + <span class="number">1</span>], dp[x] + <span class="number">1</span>);</span><br><span class="line">                x--, y++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; dp.<span class="built_in">back</span>() &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="UVA-10635-Prince-and-Princess"><a href="#UVA-10635-Prince-and-Princess" class="headerlink" title="UVA-10635 Prince and Princess"></a>UVA-10635 Prince and Princess</h2><p>A Longest Common Subsequence (LCS) Problem.</p><p>Fairly hard problem tho, mainly because it will TLE on the 2d DP solution.</p><p>Also, there’s a same problem on leetcode, up and running for those leetcode grinder. By the way, the 2d DP approach will pass on leetcode, and it’s fairly fast on those test case. No wonder it’s mark <code>medium</code> on leetcode. haha.</p><p>link: <a href="https://leetcode.com/problems/longest-common-subsequence/description/">1143. Longest Common Subsequence</a></p><h3 id="2D-DP-or-DFS-memorization-TLE"><a href="#2D-DP-or-DFS-memorization-TLE" class="headerlink" title="2D DP or DFS + memorization (TLE)"></a>2D DP or DFS + memorization (TLE)</h3><p>Provide both 2-d Dynamic Programming and dfs solution at <code>lcs()</code>.<br>But It will TLE in the judge, so I will not talk too much in this slope.</p><p>Time Complexity : <code>O(n^2)</code></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> INF 999999</span></span><br><span class="line"></span><br><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; dp;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">dfs</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;t1, vector&lt;<span class="type">int</span>&gt; &amp;t2, <span class="type">int</span> x, <span class="type">int</span> y)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (dp[x][y] != <span class="number">-1</span>)</span><br><span class="line">        <span class="keyword">return</span> dp[x][y];</span><br><span class="line">    <span class="keyword">if</span> (x &gt;= t1.<span class="built_in">size</span>() || y &gt;= t2.<span class="built_in">size</span>())</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> y1 = y, x1 = x;</span><br><span class="line">    <span class="keyword">for</span> (; y &lt; t2.<span class="built_in">size</span>(); y++)</span><br><span class="line">        <span class="keyword">if</span> (t1[x] == t2[y])</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">    <span class="keyword">if</span> (y &gt;= t2.<span class="built_in">size</span>())</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = x + <span class="number">1</span>; i &lt; t1.<span class="built_in">size</span>(); i++)</span><br><span class="line">        res = <span class="built_in">max</span>(res, <span class="built_in">dfs</span>(t1, t2, i, y + <span class="number">1</span>) + <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">return</span> dp[x1][y1] = res;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">lcs</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;t1, vector&lt;<span class="type">int</span>&gt; &amp;t2)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="comment">// dfs memoization method</span></span><br><span class="line">    <span class="comment">// return dfs(t1, t2, 0, 0) + 1;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// top down dp method</span></span><br><span class="line">    <span class="comment">// where dp[x][y] means</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> x = <span class="number">0</span>; x &lt; t1.<span class="built_in">size</span>(); x++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> y = <span class="number">0</span>; y &lt; t2.<span class="built_in">size</span>(); y++)</span><br><span class="line">        &#123;</span><br><span class="line">            dp[x][y] = <span class="number">0</span>;</span><br><span class="line">            <span class="keyword">if</span> (y - <span class="number">1</span> &gt;= <span class="number">0</span> &amp;&amp; x - <span class="number">1</span> &gt;= <span class="number">0</span>)</span><br><span class="line">                dp[x][y] = dp[x - <span class="number">1</span>][y - <span class="number">1</span>];</span><br><span class="line">            <span class="keyword">if</span> (t1[x] == t2[y])</span><br><span class="line">                dp[x][y]++;</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                dp[x][y] = <span class="built_in">max</span>(x - <span class="number">1</span> &gt;= <span class="number">0</span> ? dp[x - <span class="number">1</span>][y] : <span class="number">0</span>, y - <span class="number">1</span> &gt;= <span class="number">0</span> ? dp[x][y - <span class="number">1</span>] : <span class="number">0</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> dp[t1.<span class="built_in">size</span>() - <span class="number">1</span>][t2.<span class="built_in">size</span>() - <span class="number">1</span>];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> t;</span><br><span class="line">    cin &gt;&gt; t;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> tt = <span class="number">1</span>; tt &lt;= t; tt++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> n, p, q, temp;</span><br><span class="line">        cin &gt;&gt; n &gt;&gt; p &gt;&gt; q;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; t1, t2;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt;= p; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            cin &gt;&gt; temp;</span><br><span class="line">            t1.<span class="built_in">push_back</span>(temp);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt;= q; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            cin &gt;&gt; temp;</span><br><span class="line">            t2.<span class="built_in">push_back</span>(temp);</span><br><span class="line">        &#125;</span><br><span class="line">        dp.<span class="built_in">assign</span>(t1.<span class="built_in">size</span>(), <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(t2.<span class="built_in">size</span>(), <span class="number">-1</span>));</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Case &quot;</span> &lt;&lt; tt &lt;&lt; <span class="string">&quot;: &quot;</span> &lt;&lt; <span class="built_in">lcs</span>(t1, t2) &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="Method-2-LCS-to-LIS"><a href="#Method-2-LCS-to-LIS" class="headerlink" title="Method 2 : LCS to LIS"></a>Method 2 : LCS to LIS</h3><p>Actually, if you really look into LCS, it can be devide into a LIS, which has a best practice of complexity <code>O(nlgn)</code>.</p><p>Just like this, where <code>*</code> and <code>x</code> means <code>t1[i] == t2[j]</code>.<br><img src="/images/Screenshot2023-01-22at11.30.22PM.png"><br>ref: <a href="https://web.ntnu.edu.tw/~algo/Subsequence2.html">ntnu algo</a></p><p>But, it just not this case, right?<br>Since elements in our list is unique, so our thing will not alike some normal LCS graph. Rather, it’s more easy.</p><p>According to this rule, we can confidently say that same row or column will have no more than 1 value. Therefore, it reduce the complexity that we don’t have to use pairs… sorting … stuff. All we have to do is:</p><ol><li>map t1 value to t1 index.</li><li>through t2 iteration, add (if t1 get the same value) it’s t1 index to a vector.</li><li>Since vector is already in t2’s iteration, do LIS on vector’s value.</li></ol><p>same as the code below:</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> INF 999999</span></span><br><span class="line"></span><br><span class="line"><span class="comment">// map t1 sequential index into 1 ~ 62501 (number)</span></span><br><span class="line"><span class="type">int</span> board[<span class="number">62501</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">lcs</span><span class="params">(vector&lt;<span class="type">int</span>&gt; &amp;t1, vector&lt;<span class="type">int</span>&gt; &amp;t2)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="built_in">fill</span>(board, board + <span class="number">62501</span>, <span class="number">-1</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; t1.<span class="built_in">size</span>(); i++)</span><br><span class="line">        board[t1[i]] = i;</span><br><span class="line">    vector&lt;<span class="type">int</span>&gt; v;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; t2.<span class="built_in">size</span>(); i++)</span><br><span class="line">        <span class="keyword">if</span> (board[t2[i]] != <span class="number">-1</span>)</span><br><span class="line">            v.<span class="built_in">emplace_back</span>(board[t2[i]]);</span><br><span class="line">    <span class="comment">// Then apply LIS on v</span></span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">dp</span><span class="params">(v.size() + <span class="number">1</span>, <span class="number">100000</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; v.<span class="built_in">size</span>(); i++)</span><br><span class="line">        *<span class="built_in">lower_bound</span>(dp.<span class="built_in">begin</span>(), dp.<span class="built_in">end</span>(), v[i]) = v[i];</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">lower_bound</span>(dp.<span class="built_in">begin</span>(), dp.<span class="built_in">end</span>(), <span class="number">99999</span>) - dp.<span class="built_in">begin</span>();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> t;</span><br><span class="line">    cin &gt;&gt; t;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> tt = <span class="number">1</span>; tt &lt;= t; tt++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> n, p, q, temp;</span><br><span class="line">        cin &gt;&gt; n &gt;&gt; p &gt;&gt; q;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt; t1, t2;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt;= p; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            cin &gt;&gt; temp;</span><br><span class="line">            t1.<span class="built_in">push_back</span>(temp);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt;= q; i++)</span><br><span class="line">        &#123;</span><br><span class="line">            cin &gt;&gt; temp;</span><br><span class="line">            t2.<span class="built_in">push_back</span>(temp);</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Case &quot;</span> &lt;&lt; tt &lt;&lt; <span class="string">&quot;: &quot;</span> &lt;&lt; <span class="built_in">lcs</span>(t1, t2) &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Time complexity: <code>O(n*log(n))</code></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;UVA-10931-Parity&quot;&gt;&lt;a href=&quot;#UVA-10931-Parity&quot; class=&quot;headerlink&quot; title=&quot;UVA-10931 Parity&quot;&gt;&lt;/a&gt;UVA-10931 Parity&lt;/h2&gt;&lt;p&gt;A simply bit-w</summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/categories/Algorithm/CPE/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
    <category term="CPE" scheme="https://blog.ryankert.cc/tags/CPE/"/>
    
  </entry>
  
  <entry>
    <title>UVA 10801 Lift Hopping</title>
    <link href="https://blog.ryankert.cc/2022/12/19/uva10801/"/>
    <id>https://blog.ryankert.cc/2022/12/19/uva10801/</id>
    <published>2022-12-19T09:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.636Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Intuition"><a href="#Intuition" class="headerlink" title="Intuition"></a>Intuition</h2><p>如果直接建圖會變成multiple source, 不符合dijkstra，所以將sources和destinations都連上node 0 和 node 700，再使用dijkstra演算法，尋找0到700最短路徑。</p><h2 id="Code"><a href="#Code" class="headerlink" title="Code"></a>Code</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;climits&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;vector&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;sstream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> mp make_pair</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> pr pair<span class="string">&lt;int,int&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> INF 9999999</span></span><br><span class="line"></span><br><span class="line">vector&lt;vector&lt;pair&lt;<span class="type">int</span>, <span class="type">int</span>&gt;&gt;&gt; edges;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; T;</span><br><span class="line">priority_queue&lt;pr, vector&lt;pr&gt;, greater&lt;pr&gt;&gt;pq;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; dis;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">dijkstra</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    dis.<span class="built_in">assign</span>(<span class="number">701</span>, INF);</span><br><span class="line">    dis[<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line">    pq.<span class="built_in">emplace</span>(<span class="built_in">mp</span>(<span class="number">0</span>, <span class="number">0</span>));</span><br><span class="line">    <span class="keyword">while</span> (!pq.<span class="built_in">empty</span>()) &#123;</span><br><span class="line">        <span class="type">int</span> x = pq.<span class="built_in">top</span>().second;</span><br><span class="line">        <span class="type">int</span> val = pq.<span class="built_in">top</span>().first;</span><br><span class="line">        pq.<span class="built_in">pop</span>();</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">auto</span> y : edges[x]) &#123;</span><br><span class="line">            <span class="comment">//cout &lt;&lt; y.first &lt;&lt; &quot; &quot;;</span></span><br><span class="line">            <span class="keyword">if</span> (dis[y.first] &gt; dis[x] + y.second) &#123;</span><br><span class="line">                dis[y.first] = dis[x] + y.second;</span><br><span class="line">                pq.<span class="built_in">push</span>(<span class="built_in">mp</span>(dis[y.first], y.first));</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;<span class="comment">//cout &lt;&lt; endl;</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">connect</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> y, <span class="type">int</span> cost)</span> </span>&#123;</span><br><span class="line">    edges[x].<span class="built_in">emplace_back</span>(<span class="built_in">mp</span>(y, cost));</span><br><span class="line">    edges[y].<span class="built_in">emplace_back</span>(<span class="built_in">mp</span>(x, cost));</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">print</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">auto</span> it : edges[x]) &#123;</span><br><span class="line">        cout &lt;&lt; it.first &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; it.second &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> n, k;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; n &gt;&gt; k) &#123;</span><br><span class="line">        T.<span class="built_in">assign</span>(n + <span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">        edges.<span class="built_in">assign</span>(<span class="number">701</span>, vector&lt;pair&lt;<span class="type">int</span>, <span class="type">int</span>&gt;&gt;());</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i++)</span><br><span class="line">            cin &gt;&gt; T[i];</span><br><span class="line">        cin.<span class="built_in">ignore</span>();</span><br><span class="line">        <span class="comment">// connect linearly</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i++) &#123;</span><br><span class="line">            string s;</span><br><span class="line">            <span class="built_in">getline</span>(cin, s);</span><br><span class="line">            <span class="function">stringstream <span class="title">ss</span><span class="params">(s)</span></span>;</span><br><span class="line">            <span class="type">int</span> x, y;</span><br><span class="line">            ss &gt;&gt; x;</span><br><span class="line">            <span class="keyword">if</span> (x == <span class="number">0</span>)</span><br><span class="line">                <span class="built_in">connect</span>(<span class="number">0</span>, <span class="number">100</span> * i, <span class="number">0</span>);</span><br><span class="line">            <span class="keyword">while</span> (ss &gt;&gt; y) &#123;</span><br><span class="line">                <span class="built_in">connect</span>(<span class="number">100</span> * i + x, <span class="number">100</span> * i + y, (y - x) * T[i]);</span><br><span class="line">                x = y;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        </span><br><span class="line">        <span class="comment">// connect different -elevator</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; <span class="number">100</span>; i++)</span><br><span class="line">            <span class="keyword">for</span> (<span class="type">int</span> x = <span class="number">1</span>; x &lt;= n; x++)</span><br><span class="line">                <span class="keyword">for</span> (<span class="type">int</span> y = x + <span class="number">1</span>; y &lt;= n; y++)</span><br><span class="line">                    <span class="keyword">if</span> (!edges[x * <span class="number">100</span> + i].<span class="built_in">empty</span>() &amp;&amp; !edges[y * <span class="number">100</span> + i].<span class="built_in">empty</span>())</span><br><span class="line">                        <span class="built_in">connect</span>(x * <span class="number">100</span> + i, y * <span class="number">100</span> + i, <span class="number">60</span>);</span><br><span class="line">        <span class="comment">// connect endpoint</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> x = <span class="number">1</span>; x &lt;= n; x++)</span><br><span class="line">            <span class="keyword">if</span> (!edges[x * <span class="number">100</span> + k].<span class="built_in">empty</span>())</span><br><span class="line">                <span class="built_in">connect</span>(x * <span class="number">100</span> + k, <span class="number">700</span>, <span class="number">0</span>);</span><br><span class="line">        <span class="comment">//print(230);</span></span><br><span class="line">        <span class="built_in">dijkstra</span>();</span><br><span class="line">        <span class="keyword">if</span> (dis[<span class="number">700</span>] == INF)</span><br><span class="line">            cout &lt;&lt; <span class="string">&quot;IMPOSSIBLE\n&quot;</span>;</span><br><span class="line">        <span class="keyword">else</span> cout &lt;&lt; dis[<span class="number">700</span>] &lt;&lt; endl;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Intuition&quot;&gt;&lt;a href=&quot;#Intuition&quot; class=&quot;headerlink&quot; title=&quot;Intuition&quot;&gt;&lt;/a&gt;Intuition&lt;/h2&gt;&lt;p&gt;如果直接建圖會變成multiple source, 不符合dijkstra，所以將s</summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>DFS Algorithms</title>
    <link href="https://blog.ryankert.cc/2022/12/08/data_structure/dfs/"/>
    <id>https://blog.ryankert.cc/2022/12/08/data_structure/dfs/</id>
    <published>2022-12-08T09:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<p>DFS, aka. depth-first search, is a nice tool to look data in depth-first manner.<br>an example to travel through graph will be this :</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="type">void</span> <span class="title">dfs</span><span class="params">(Node* u)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> u is visited:</span><br><span class="line">        <span class="keyword">return</span>;</span><br><span class="line">    <span class="built_in">Visit</span>();</span><br><span class="line">    <span class="function"><span class="keyword">for</span> <span class="title">edges</span><span class="params">(u,v)</span> connect with node:</span></span><br><span class="line"><span class="function">        dfs(v);</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="Examples"><a href="#Examples" class="headerlink" title="Examples:"></a>Examples:</h2><h3 id="DFS"><a href="#DFS" class="headerlink" title="DFS"></a>DFS</h3><h4 id="UVA-280-Vertex"><a href="#UVA-280-Vertex" class="headerlink" title="UVA - 280 Vertex"></a>UVA - 280 Vertex</h4><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> mp make_pair</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ALL(x) x.begin(), x.end()</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> mod = <span class="number">1e9</span> + <span class="number">7</span>;</span><br><span class="line"></span><br><span class="line">vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; ver;</span><br><span class="line">vector&lt;<span class="type">int</span>&gt; vis;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> start = <span class="number">0</span>)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (vis[x])</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">if</span> (!start)</span><br><span class="line">        vis[x] = <span class="number">1</span>;</span><br><span class="line">    <span class="type">int</span> res = <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; ver[x].<span class="built_in">size</span>(); i++)</span><br><span class="line">        res += <span class="built_in">dfs</span>(ver[x][i]);</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">(<span class="type">int</span> v)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    ver.<span class="built_in">clear</span>();</span><br><span class="line">    ver.<span class="built_in">resize</span>(v + <span class="number">1</span>);</span><br><span class="line">    <span class="type">int</span> temp, t1;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; temp &amp;&amp; temp)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">while</span> (cin &gt;&gt; t1 &amp;&amp; t1)</span><br><span class="line">            ver[temp].<span class="built_in">emplace_back</span>(t1);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> m;</span><br><span class="line">    cin &gt;&gt; m;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        vis.<span class="built_in">clear</span>();</span><br><span class="line">        vis.<span class="built_in">resize</span>(v + <span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">        cin &gt;&gt; temp;</span><br><span class="line">        cout &lt;&lt; v + <span class="number">1</span> - <span class="built_in">dfs</span>(temp, <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">1</span>; j &lt;= v; j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span> (vis[j] == <span class="number">0</span>)</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; j;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">const</span> <span class="type">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> v;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; v &amp;&amp; v)</span><br><span class="line">        <span class="built_in">solve</span>(v);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="UVA-614"><a href="#UVA-614" class="headerlink" title="UVA - 614"></a>UVA - 614</h4><p>HAVE TO USE <code>setw</code>. (very important!!!)</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  main.cpp</span></span><br><span class="line"><span class="comment">//  template</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  Created by Ryan Kert on 2022/10/22.</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> fast                      \</span></span><br><span class="line"><span class="meta">    ios_base::sync_with_stdio(0); \</span></span><br><span class="line"><span class="meta">    cin.tie(0);                   \</span></span><br><span class="line"><span class="meta">    cout.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> mp make_pair</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ALL(x) x.begin(), x.end()</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> mod = <span class="number">1e9</span> + <span class="number">7</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> r[<span class="number">6</span>];</span><br><span class="line"><span class="type">int</span> m[<span class="number">12</span>][<span class="number">12</span>];</span><br><span class="line"><span class="type">int</span> vis[<span class="number">12</span>][<span class="number">12</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">draw</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;+&quot;</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; r[<span class="number">1</span>]; i++)</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;---+&quot;</span>;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; r[<span class="number">0</span>]; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;|&quot;</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; r[<span class="number">1</span>]; j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span> (vis[i][j] == <span class="number">0</span>)</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;   &quot;</span>;</span><br><span class="line">            <span class="keyword">if</span> (vis[i][j] == <span class="number">-1</span>)</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;???&quot;</span>;</span><br><span class="line">            <span class="keyword">if</span> (vis[i][j] &gt; <span class="number">0</span>)</span><br><span class="line">                cout &lt;&lt; <span class="built_in">setw</span>(<span class="number">3</span>) &lt;&lt; vis[i][j];</span><br><span class="line">            <span class="keyword">if</span> (m[i][j] % <span class="number">2</span> == <span class="number">1</span> || j + <span class="number">1</span> == r[<span class="number">1</span>])</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;|&quot;</span>;</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                cout &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;\n+&quot;</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; r[<span class="number">1</span>]; j++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span> (m[i][j] &gt; <span class="number">1</span> || i + <span class="number">1</span> == r[<span class="number">0</span>])</span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;---+&quot;</span>;</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                cout &lt;&lt; <span class="string">&quot;   +&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    cout &lt;&lt; <span class="string">&quot;\n\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> y, <span class="type">int</span> ind)</span> <span class="comment">// x : row, y : col</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (vis[x][y] != <span class="number">0</span>)</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    vis[x][y] = ind++;</span><br><span class="line">    <span class="keyword">if</span> (x == r[<span class="number">4</span>] &amp;&amp; y == r[<span class="number">5</span>])</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (y &gt; <span class="number">0</span> &amp;&amp; m[x][y - <span class="number">1</span>] % <span class="number">2</span> == <span class="number">0</span>) <span class="comment">// left</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">dfs</span>(x, y - <span class="number">1</span>, ind))</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">if</span> (x &gt; <span class="number">0</span> &amp;&amp; m[x - <span class="number">1</span>][y] &lt; <span class="number">2</span>) <span class="comment">// up</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">dfs</span>(x - <span class="number">1</span>, y, ind))</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">if</span> (y + <span class="number">1</span> &lt; r[<span class="number">1</span>] &amp;&amp; m[x][y] % <span class="number">2</span> == <span class="number">0</span>) <span class="comment">// right</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">dfs</span>(x, y + <span class="number">1</span>, ind))</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">if</span> (x + <span class="number">1</span> &lt; r[<span class="number">0</span>] &amp;&amp; m[x][y] &lt; <span class="number">2</span>) <span class="comment">// down</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">dfs</span>(x + <span class="number">1</span>, y, ind))</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">    vis[x][y] = <span class="number">-1</span>;</span><br><span class="line">    ind--;</span><br><span class="line">    <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; r[<span class="number">0</span>]; i++)</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> j = <span class="number">0</span>; j &lt; r[<span class="number">1</span>]; j++)</span><br><span class="line">            cin &gt;&gt; m[i][j];</span><br><span class="line">    <span class="built_in">memset</span>(vis, <span class="number">0</span>, <span class="built_in">sizeof</span>(vis));</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">2</span>; i &lt; <span class="number">6</span>; i++)</span><br><span class="line">        r[i]--;</span><br><span class="line">    <span class="built_in">dfs</span>(r[<span class="number">2</span>], r[<span class="number">3</span>], <span class="number">1</span>);</span><br><span class="line">    <span class="built_in">draw</span>();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">const</span> <span class="type">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    fast;</span><br><span class="line">    <span class="type">int</span> cnt = <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (cin &gt;&gt; r[<span class="number">0</span>] &gt;&gt; r[<span class="number">1</span>] &gt;&gt; r[<span class="number">2</span>] &gt;&gt; r[<span class="number">3</span>] &gt;&gt; r[<span class="number">4</span>] &gt;&gt; r[<span class="number">5</span>] &amp;&amp; r[<span class="number">0</span>])</span><br><span class="line">    &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Maze &quot;</span> &lt;&lt; cnt++ &lt;&lt; <span class="string">&quot;\n\n&quot;</span>;</span><br><span class="line">        <span class="built_in">solve</span>();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="UVA-12442-Forwarding-Emails"><a href="#UVA-12442-Forwarding-Emails" class="headerlink" title="UVA - 12442 Forwarding Emails"></a>UVA - 12442 Forwarding Emails</h4><p>brute force &#x3D; TLE<br>Therefore, we think that if we had traveled the vertex before, we don’t have to travel it again, since if it has been traversed, the traveler is definitely possessed greater reachable person.</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  main.cpp</span></span><br><span class="line"><span class="comment">//  template</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  Created by Ryan Kert on 2022/10/22.</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ll long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> fast                      \</span></span><br><span class="line"><span class="meta">    ios_base::sync_with_stdio(0); \</span></span><br><span class="line"><span class="meta">    cin.tie(0);                   \</span></span><br><span class="line"><span class="meta">    cout.tie(0)</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> mp make_pair</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> ALL(x) x.begin(), x.end()</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> mod = <span class="number">1e9</span> + <span class="number">7</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> v[<span class="number">50001</span>];</span><br><span class="line"><span class="type">bool</span> vis[<span class="number">50001</span>], dfsV[<span class="number">50001</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">dfs</span><span class="params">(<span class="type">int</span> i)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (dfsV[i])</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    vis[i] = dfsV[i] = <span class="literal">true</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">1</span> + <span class="built_in">dfs</span>(v[i]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="type">int</span> m;</span><br><span class="line">    cin &gt;&gt; m;</span><br><span class="line">    <span class="built_in">memset</span>(v, <span class="number">0</span>, m + <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; m; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="type">int</span> ind;</span><br><span class="line">        cin &gt;&gt; ind;</span><br><span class="line">        cin &gt;&gt; v[ind];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> res = <span class="number">0</span>, idx;</span><br><span class="line">    <span class="built_in">memset</span>(vis, <span class="literal">false</span>, m + <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt;= m; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span> (!vis[i])</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">memset</span>(dfsV, <span class="literal">false</span>, m + <span class="number">1</span>);</span><br><span class="line">            <span class="type">int</span> temp = <span class="built_in">dfs</span>(i);</span><br><span class="line">            <span class="keyword">if</span> (res &lt; temp)</span><br><span class="line">            &#123;</span><br><span class="line">                res = temp;</span><br><span class="line">                idx = i;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    cout &lt;&lt; idx &lt;&lt; endl;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">const</span> <span class="type">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    fast;</span><br><span class="line">    <span class="type">int</span> t;</span><br><span class="line">    cin &gt;&gt; t;</span><br><span class="line">    <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; t; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        cout &lt;&lt; <span class="string">&quot;Case &quot;</span> &lt;&lt; i + <span class="number">1</span> &lt;&lt; <span class="string">&quot;: &quot;</span>;</span><br><span class="line">        <span class="built_in">solve</span>();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;DFS, aka. depth-first search, is a nice tool to look data in depth-first manner.&lt;br&gt;an example to travel through graph will be this :&lt;/p&gt;</summary>
      
    
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/categories/Algorithm/"/>
    
    
    <category term="Algorithm" scheme="https://blog.ryankert.cc/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>Collect you and your friends&#39; blog posts via blogroll</title>
    <link href="https://blog.ryankert.cc/2022/09/01/blogroll-setup/"/>
    <id>https://blog.ryankert.cc/2022/09/01/blogroll-setup/</id>
    <published>2022-09-01T20:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Build-an-Blogroll-on-Hexo-Next"><a href="#Build-an-Blogroll-on-Hexo-Next" class="headerlink" title="Build an Blogroll on Hexo Next"></a>Build an Blogroll on Hexo Next</h1><p>Year ago, I saw many blogger collects their friends blog post via Github Action auto run.<br>Therefore, I always want to try it out.</p><p>Anyways, I build it with typescript. Also, if you have any questions or suggestions, any issues or prs are welcomed.</p><h2 id="Step1-Generate-useful-Data-from-RSS-feed"><a href="#Step1-Generate-useful-Data-from-RSS-feed" class="headerlink" title="Step1: Generate useful Data from RSS-feed"></a>Step1: Generate useful Data from RSS-feed</h2><p>This project is based on rss feed, so if you or your friend blog doesn’t have <code>/feed</code>, <code>feed.xml</code>, <code>atom.xml</code>, or any kinds of xml file contains your full blogs’ intel, you will have to generate one yourself.</p><div class="note info">            <h4 id="Project-URL"><a href="#Project-URL" class="headerlink" title="Project URL"></a>Project URL</h4><p><a href="https://github.com/ryankert01/rss-friend">https://github.com/ryankert01/rss-friend</a></p>          </div><h3 id="How-to-use-it"><a href="#How-to-use-it" class="headerlink" title="How to use it"></a>How to use it</h3><ol><li><p>Fork this repository</p></li><li><p>install your friends’ rss pages into this file <code>./_data/friends.json</code>, in this format:</p></li></ol><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Ryan&#x27;s Blog&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;link&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://blog.ryankert.cc/&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;feed&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://blog.ryankert.cc/atom.xml&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    ...</span><br><span class="line"><span class="punctuation">]</span></span><br></pre></td></tr></table></figure><ol start="3"><li>Until it generate file sussessfully, it will generate a new branch automatically. Then, you setup your github page to display the branch <code>gh-pages</code>.</li></ol><p>It will be display at <code>https://&lt;github-username&gt;.github.io/rss-friend/&lt;file&gt;</code>.</p><p>There are three file generated</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">rss.json       // sorted json year, month, day</span><br><span class="line">sorted.json    // sorted json universal date ex:2022-08-22T17:47:35.000Z</span><br><span class="line">unsort.json    // unsort raw data</span><br></pre></td></tr></table></figure><h3 id="Auto-Update"><a href="#Auto-Update" class="headerlink" title="Auto Update"></a>Auto Update</h3><p>at (UTC) 1:00 and 13:00</p><p>or at (UTC+8) 9:00 and 21:00</p><h2 id="Step2-Hexo-settings"><a href="#Step2-Hexo-settings" class="headerlink" title="Step2: Hexo settings"></a>Step2: Hexo settings</h2><h3 id="Setup-blogroll-page"><a href="#Setup-blogroll-page" class="headerlink" title="Setup blogroll page"></a>Setup blogroll page</h3><ol><li><p>in <code>./source</code> folder, add <code>blogroll/index.md</code>, change <code>&lt;github_username&gt;</code> to your github username.</p><p><strong>index.md</strong></p></li></ol><figure class="highlight md"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Friends &amp; Blogroll</span><br><span class="line">date: 2022-08-25 22:59:02</span><br><span class="line"><span class="section">comments: false</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"></span><br><span class="line">&#123;% note info %&#125;</span><br><span class="line"></span><br><span class="line"><span class="section">#### Welcome to Friends &amp; blog</span></span><br><span class="line"></span><br><span class="line">This place collects my friends &amp; some of the nice blogs of my select.</span><br><span class="line"></span><br><span class="line">&#123;% endnote %&#125;</span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;posts_friends&quot;</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">script</span>&gt;</span></span></span><br><span class="line">function createElement(elementType, style, link, innerhtml) &#123;</span><br><span class="line">  let elementCreated = document.createElement(elementType);</span><br><span class="line">  elementCreated.href = link;</span><br><span class="line">  elementCreated.innerHTML = innerhtml;</span><br><span class="line">  elementCreated.style = style;</span><br><span class="line">  return elementCreated;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var p<span class="emphasis">_f = document.querySelector(&#x27;.posts_</span>friends&#x27;);</span><br><span class="line">const request = &#x27;https://<span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag">&lt;<span class="name">github_username</span>&gt;</span></span></span></span>.github.io/rss-friend/sorted.json&#x27;;</span><br><span class="line">let d = new Date();</span><br><span class="line">fetch(request)</span><br><span class="line">  .then(response =&gt; response.json()) </span><br><span class="line">  .then(json =&gt; &#123;</span><br><span class="line"><span class="code">    for(let i = 0; i &lt; json.length; i++) &#123;</span></span><br><span class="line"><span class="code">        let currentItem = document.createElement(&#x27;div&#x27;);</span></span><br><span class="line"><span class="code">        d = new Date(json[i].date);</span></span><br><span class="line"><span class="code">        let e;</span></span><br><span class="line"><span class="code"></span></span><br><span class="line"><span class="code">        // date</span></span><br><span class="line"><span class="code">        let monthAppend = d.getMonth()+1;</span></span><br><span class="line"><span class="code">        monthAppend = monthAppend.toString();</span></span><br><span class="line"><span class="code">        monthAppend = monthAppend.length &lt; 2 ? &quot;0&quot; + monthAppend : monthAppend;</span></span><br><span class="line"><span class="code">        let dayAppend = d.getDate();</span></span><br><span class="line"><span class="code">        dayAppend = dayAppend.toString();</span></span><br><span class="line"><span class="code">        dayAppend = dayAppend.length &lt; 2 ? &quot;0&quot; + dayAppend : dayAppend;</span></span><br><span class="line"><span class="code">        let tempAppend = monthAppend + &quot;-&quot; + dayAppend + &quot; &quot;;</span></span><br><span class="line"><span class="code">        </span></span><br><span class="line"><span class="code">        let margin = 10;</span></span><br><span class="line"><span class="code">        for (let j = 0; j &lt; tempAppend.length; j++) &#123;</span></span><br><span class="line"><span class="code">          if(tempAppend[j] === &#x27;1&#x27;)</span></span><br><span class="line"><span class="code">            margin += 2;</span></span><br><span class="line"><span class="code">          console.log(margin);</span></span><br><span class="line"><span class="code">        &#125;</span></span><br><span class="line"><span class="code">        let style = &quot;border-bottom: none; opacity: 65%; margin: &quot;;</span></span><br><span class="line"><span class="code">        style += margin.toString() + &quot;px&quot;;</span></span><br><span class="line"><span class="code">        e = createElement(</span></span><br><span class="line"><span class="code">          &#x27;a&#x27;,</span></span><br><span class="line"><span class="code">          style, </span></span><br><span class="line"><span class="code">          null, </span></span><br><span class="line"><span class="code">          tempAppend</span></span><br><span class="line"><span class="code">        );</span></span><br><span class="line"><span class="code">        currentItem.appendChild(e);</span></span><br><span class="line"><span class="code"></span></span><br><span class="line"><span class="code">        // title + link</span></span><br><span class="line"><span class="code">        e = createElement(&#x27;a&#x27;, null, json[i].link, json[i].title);</span></span><br><span class="line"><span class="code">        currentItem.appendChild(e);</span></span><br><span class="line"><span class="code"></span></span><br><span class="line"></span><br><span class="line"><span class="code">        // author + link</span></span><br><span class="line"><span class="code">        e = createElement(&#x27;a&#x27;, &quot;opacity: 75%;&quot;, json[i].author.link, json[i].author.name);</span></span><br><span class="line"><span class="code">        e.classList.add(&quot;e-author&quot;);</span></span><br><span class="line"><span class="code">        currentItem.appendChild(e);</span></span><br><span class="line"><span class="code">        p_f.appendChild(currentItem);</span></span><br><span class="line"><span class="code">    &#125;</span></span><br><span class="line"><span class="code">  &#125;) </span></span><br><span class="line"><span class="code">&lt;/script&gt;</span></span><br><span class="line"><span class="code"></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag">&lt;<span class="name">style</span>&gt;</span></span></span></span></span><br><span class="line">.e-author &#123;</span><br><span class="line">  position: absolute; </span><br><span class="line">  right: 5px;   </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">@media screen and (max-width: 760px) &#123;</span><br><span class="line">  .e-author &#123;</span><br><span class="line"><span class="code">    position: relative;</span></span><br><span class="line"><span class="code">    left: 15px</span></span><br><span class="line"><span class="code">  &#125;</span></span><br><span class="line"><span class="code">&#125;</span></span><br><span class="line"><span class="code"></span></span><br><span class="line"><span class="language-xml"><span class="language-handlebars"><span class="language-xml"><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span></span></span></span><br></pre></td></tr></table></figure><ol start="2"><li>in <code>./theme/hexo-theme-next/_config.yml</code>, add Blogroll</li></ol><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="string">...</span></span><br><span class="line">  <span class="attr">Blogroll:</span> <span class="string">/blogroll/</span> <span class="string">||</span> <span class="string">fa</span> <span class="string">fa-blog</span> <span class="comment"># add</span></span><br></pre></td></tr></table></figure><h2 id="Debug"><a href="#Debug" class="headerlink" title="Debug"></a>Debug</h2><p>visit <a href="https://theme-next.js.org/docs/theme-settings/custom-pages.html">Hexo Next Docs</a> or email me : <a href="mailto:&#114;&#121;&#x61;&#110;&#x40;&#x72;&#121;&#x61;&#110;&#107;&#101;&#114;&#x74;&#x2e;&#x63;&#99;">&#114;&#121;&#x61;&#110;&#x40;&#x72;&#121;&#x61;&#110;&#107;&#101;&#114;&#x74;&#x2e;&#x63;&#99;</a>.</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Build-an-Blogroll-on-Hexo-Next&quot;&gt;&lt;a href=&quot;#Build-an-Blogroll-on-Hexo-Next&quot; class=&quot;headerlink&quot; title=&quot;Build an Blogroll on Hexo Next&quot;&gt;</summary>
      
    
    
    
    <category term="Web" scheme="https://blog.ryankert.cc/categories/Web/"/>
    
    <category term="Static Website Generator" scheme="https://blog.ryankert.cc/categories/Web/Static-Website-Generator/"/>
    
    
    <category term="Hexo" scheme="https://blog.ryankert.cc/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>How to setup a typescript Project as fast as possible</title>
    <link href="https://blog.ryankert.cc/2022/09/01/setup-ts-project/"/>
    <id>https://blog.ryankert.cc/2022/09/01/setup-ts-project/</id>
    <published>2022-09-01T20:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.636Z</updated>
    
    <content type="html"><![CDATA[<h1 id="How-to-setup-a-typescript-Project-as-fast-as-possible"><a href="#How-to-setup-a-typescript-Project-as-fast-as-possible" class="headerlink" title="How to setup a typescript Project as fast as possible"></a>How to setup a typescript Project as fast as possible</h1><h2 id="Simply-type-in"><a href="#Simply-type-in" class="headerlink" title="Simply type in"></a>Simply type in</h2><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm gts init</span><br></pre></td></tr></table></figure><p>And then, boom, well-done, a well typescript project is initialized, and it’s very nice.</p><h2 id="Some-useful-knowledge-about-this-quick-generate"><a href="#Some-useful-knowledge-about-this-quick-generate" class="headerlink" title="Some useful knowledge about this quick generate"></a>Some useful knowledge about this quick generate</h2><p><strong>Compile</strong></p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm run compile</span><br></pre></td></tr></table></figure><p><strong>Run</strong></p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">node &lt;file_dir&gt;/&lt;file_name&gt;</span><br></pre></td></tr></table></figure><p>for more info, check out gts offical <a href="https://github.com/google/gts">documentation</a>.</p><h1 id="Or-you-meant-to-start-a-minimal-typescript-project"><a href="#Or-you-meant-to-start-a-minimal-typescript-project" class="headerlink" title="Or you meant to start a minimal typescript project"></a>Or you meant to start a minimal typescript project</h1><p>You can use my minimal typescript project starter</p><h2 id="Quick-start"><a href="#Quick-start" class="headerlink" title="Quick start"></a>Quick start</h2><ol><li>clone this project</li></ol><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/ryankert01/ts-starter.git</span><br></pre></td></tr></table></figure><ol start="2"><li>initialize</li></ol><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm i</span><br></pre></td></tr></table></figure><h2 id="Scripts"><a href="#Scripts" class="headerlink" title="Scripts"></a>Scripts</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">yarn compile   // compile ts file</span><br><span class="line">yarn dev       // watch ts file</span><br><span class="line">yarn start     // run this project</span><br></pre></td></tr></table></figure><h2 id="End-of-story…"><a href="#End-of-story…" class="headerlink" title="End of story…"></a>End of story…</h2>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;How-to-setup-a-typescript-Project-as-fast-as-possible&quot;&gt;&lt;a href=&quot;#How-to-setup-a-typescript-Project-as-fast-as-possible&quot; class=&quot;heade</summary>
      
    
    
    
    <category term="Web" scheme="https://blog.ryankert.cc/categories/Web/"/>
    
    
    <category term="Typescript" scheme="https://blog.ryankert.cc/tags/Typescript/"/>
    
  </entry>
  
  <entry>
    <title>Switching to Hexo!</title>
    <link href="https://blog.ryankert.cc/2022/07/13/hello-world/"/>
    <id>https://blog.ryankert.cc/2022/07/13/hello-world/</id>
    <published>2022-07-13T20:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Why"><a href="#Why" class="headerlink" title="Why?"></a>Why?</h2><p>I was priviously using jekyll TeXt theme, but the code block shows too small to watch code. Also, I don’t really understand the coding language jekyll is using, so I decide to switch to a more familier javascript framework, hexo.</p><h2 id="What-is-Hexo"><a href="#What-is-Hexo" class="headerlink" title="What is Hexo?"></a>What is Hexo?</h2><p>Hexo is a website generator to generate website based on Markdown file, and it is highly customizable.</p><h2 id="Install-Hexo"><a href="#Install-Hexo" class="headerlink" title="Install Hexo"></a>Install Hexo</h2><p>Preriquisite: <code>Git</code> and <code>node.js</code>.</p><h2 id="Install-Hexo-CLI"><a href="#Install-Hexo-CLI" class="headerlink" title="Install Hexo CLI"></a>Install Hexo CLI</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g hexo-cli</span><br></pre></td></tr></table></figure><p>and, we can execute Hexo commands in this way:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx hexo &lt;<span class="built_in">command</span>&gt;</span><br></pre></td></tr></table></figure><p><strong>Install Starter Package &amp; Dependencies</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">npx hexo init blog</span><br><span class="line"><span class="built_in">cd</span> blog</span><br><span class="line">npm install</span><br></pre></td></tr></table></figure><h2 id="Server"><a href="#Server" class="headerlink" title="Server"></a>Server</h2><p>Run these commands, and you will see a starter website is generated by Hexo.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npx hexo g</span><br><span class="line">npx hexo s</span><br></pre></td></tr></table></figure><h2 id="Writing"><a href="#Writing" class="headerlink" title="Writing"></a>Writing</h2><p>In <code>sourse/__post</code> folder, we already have a <code>hello-world.md</code> post that is from Hexo starter package. Basically, we can imitate that first.</p><p>For detail Infomation, visit <a href="https://hexo.io/docs/front-matter">Hexo Doc front-matter</a></p><h3 id="Example"><a href="#Example" class="headerlink" title="Example:"></a>Example:</h3><figure class="highlight md"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: Switching to Hexo!</span><br><span class="line">tags: [Hexo]</span><br><span class="line"><span class="section">categories: [Static Website Generator]</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"></span><br><span class="line"><span class="section"># header</span></span><br><span class="line"></span><br><span class="line">your blog post</span><br></pre></td></tr></table></figure><h2 id="Theme"><a href="#Theme" class="headerlink" title="Theme"></a>Theme</h2><p>You can search for theme you like on <a href="https://hexo.io/themes/">This Site</a> or Github, but in hexo, I will generally recommand <code>next</code>. It’s not only because it’s highly customizable, but for its already built nice plugins.</p><h2 id="Deploy"><a href="#Deploy" class="headerlink" title="Deploy"></a>Deploy</h2><p>Use</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx hexo g</span><br></pre></td></tr></table></figure><p>It will generate html file that you might want to deploy to github in <code>pulic</code> directory, and you can use Github Pages to handle that.</p><p><a href="https://pages.github.com/">Github Pages Tutorial</a></p><h2 id="Auto-Deploy-with-Github-Actions"><a href="#Auto-Deploy-with-Github-Actions" class="headerlink" title="Auto Deploy with Github Actions"></a>Auto Deploy with Github Actions</h2><p>Baically, you might find it annoying to generate <code>html</code> file everytime you want to make a change. Github can handle that for me.</p><ol><li>Uplaod your whole project to Github.</li><li>add a file to your repository, <code>.github/workflows/deploy.yml</code></li></ol><p><strong>.github&#x2F;workflows&#x2F;deploy.yml</strong></p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Pages</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">push:</span></span><br><span class="line">    <span class="attr">branches:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">main</span> <span class="comment"># default branch</span></span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">pages:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">uses:</span> <span class="string">actions/checkout@v2</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Use</span> <span class="string">Node.js</span> <span class="number">16.</span><span class="string">x</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/setup-node@v2</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">node-version:</span> <span class="string">&quot;16&quot;</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Cache</span> <span class="string">NPM</span> <span class="string">dependencies</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">actions/cache@v2</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">path:</span> <span class="string">node_modules</span></span><br><span class="line">          <span class="attr">key:</span> <span class="string">$&#123;&#123;</span> <span class="string">runner.OS</span> <span class="string">&#125;&#125;-npm-cache</span></span><br><span class="line">          <span class="attr">restore-keys:</span> <span class="string">|</span></span><br><span class="line"><span class="string">            $&#123;&#123; runner.OS &#125;&#125;-npm-cache</span></span><br><span class="line"><span class="string"></span>      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">Dependencies</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">npm</span> <span class="string">install</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Build</span></span><br><span class="line">        <span class="attr">run:</span> <span class="string">npm</span> <span class="string">run</span> <span class="string">build</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Deploy</span></span><br><span class="line">        <span class="attr">uses:</span> <span class="string">peaceiris/actions-gh-pages@v3</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">github_token:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.GITHUB_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          <span class="attr">publish_dir:</span> <span class="string">./public</span></span><br><span class="line">          <span class="attr">cname:</span> <span class="comment"># if you use custom domain, enter your hosting domain for this project.</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Why&quot;&gt;&lt;a href=&quot;#Why&quot; class=&quot;headerlink&quot; title=&quot;Why?&quot;&gt;&lt;/a&gt;Why?&lt;/h2&gt;&lt;p&gt;I was priviously using jekyll TeXt theme, but the code block sho</summary>
      
    
    
    
    <category term="Static Website Generator" scheme="https://blog.ryankert.cc/categories/Static-Website-Generator/"/>
    
    
    <category term="Hexo" scheme="https://blog.ryankert.cc/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>Youtube Thumbnail Scraping</title>
    <link href="https://blog.ryankert.cc/2022/04/20/youtube-thumbnail-scraping/"/>
    <id>https://blog.ryankert.cc/2022/04/20/youtube-thumbnail-scraping/</id>
    <published>2022-04-20T20:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.636Z</updated>
    
    <content type="html"><![CDATA[<p>To crawl thumbnails on YouTube, we use a interesting website that YouTube made for us for quick request for thumnail image.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://i.ytimg.com/vi/&#123;YouTube_video_id&#125;/maxresdefault.jpg</span><br></pre></td></tr></table></figure><p>Firstly, we convert YouTube url to id by following code, and use “get” methed request the image.</p><p>Then, we stored the image in folder you like<br>using <code>imagedown(YouTube_video_id, &#39;folder_name&#39;)</code></p><p>If there’s no such folder, then it will auto generate a new one.</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> re</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line"><span class="comment">#urls to id</span></span><br><span class="line">url = <span class="string">&quot;YouTube URL&quot;</span></span><br><span class="line">exp = <span class="string">&quot;^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&amp;?]*).*&quot;</span></span><br><span class="line">s = re.findall(exp,url)[<span class="number">0</span>][-<span class="number">1</span>]</span><br><span class="line">thumbnail = <span class="string">f&quot;https://i.ytimg.com/vi/<span class="subst">&#123;s&#125;</span>/maxresdefault.jpg&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#image scraping</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">imagedown</span>(<span class="params">url, folder</span>):</span><br><span class="line">    <span class="keyword">try</span>:</span><br><span class="line">        os.mkdir(os.path.join(os.getcwd(), folder))</span><br><span class="line">    <span class="keyword">except</span>:</span><br><span class="line">        <span class="keyword">pass</span></span><br><span class="line">    os.chdir(os.path.join(os.getcwd(), folder))</span><br><span class="line"></span><br><span class="line">    name = url</span><br><span class="line">    link = url</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(name.replace(<span class="string">&#x27; &#x27;</span>, <span class="string">&#x27;-&#x27;</span>).replace(<span class="string">&#x27;/&#x27;</span>, <span class="string">&#x27;&#x27;</span>) + <span class="string">&#x27;.jpg&#x27;</span>, <span class="string">&#x27;wb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        im = requests.get(link)</span><br><span class="line">        f.write(im.content)</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&#x27;Writing: &#x27;</span>, name)</span><br><span class="line"></span><br><span class="line">imagedown(thumbnail, <span class="string">&#x27;image&#x27;</span>)</span><br></pre></td></tr></table></figure><p>Credits: <a href="https://stackoverflow.com/questions/47730259/installing-urllib-in-python3-6">StackoverFlow</a> and <a href="https://github.com/jhnwr">jhnwr</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;To crawl thumbnails on YouTube, we use a interesting website that YouTube made for us for quick request for thumnail image.&lt;/p&gt;
&lt;figure c</summary>
      
    
    
    
    <category term="Scraping" scheme="https://blog.ryankert.cc/categories/Scraping/"/>
    
    
    <category term="Scraping" scheme="https://blog.ryankert.cc/tags/Scraping/"/>
    
  </entry>
  
  <entry>
    <title>Download Google font and use it in offline html</title>
    <link href="https://blog.ryankert.cc/2022/04/18/google-font-offline/"/>
    <id>https://blog.ryankert.cc/2022/04/18/google-font-offline/</id>
    <published>2022-04-18T20:46:25.000Z</published>
    <updated>2024-04-22T17:07:33.635Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Download-Google-font-and-use-it-in-offline-html"><a href="#Download-Google-font-and-use-it-in-offline-html" class="headerlink" title="Download Google font and use it in offline html"></a>Download Google font and use it in offline html</h2><p><strong>Steps required</strong></p><ol><li>find your beloved font at google fonts.</li><li>select all font styles that you might want to have.</li><li>find its’ url ex:<code>https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&amp;display=swap</code>, which will be in<code>To embed a font, copy the code into the &lt;head&gt; of your html</code>&#x2F;<code>&lt;link&gt;</code></li><li>open it in the browser and convert it to <code>example.css</code></li><li>make a directory “fonts” ex:<code>mkdir fonts</code></li><li>make a <code>main.py</code> in same directory.</li><li>paste the automate python code in it.</li><li>comfirm that this directory has three object:<ul><li><input disabled="" type="checkbox"> <code>main.py</code></li><li><input disabled="" type="checkbox"> empty directory <code>fonts</code></li><li><input disabled="" type="checkbox"> <code>example.css</code></li></ul></li><li>run the python code <code>python main.py</code></li><li>embed <code>example.css</code> in your html file</li></ol><p><strong><code>main.py</code></strong></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">import</span> re</span><br><span class="line"></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&quot;example.css&quot;</span>, <span class="string">&quot;r&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">    text = f.read()</span><br><span class="line">    urls = re.findall(<span class="string">r&#x27;(https?://[^\)]+)&#x27;</span>, text)</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> url <span class="keyword">in</span> urls:</span><br><span class="line">    filename = url.split(<span class="string">&quot;/&quot;</span>)[-<span class="number">1</span>]</span><br><span class="line">    r = requests.get(url)</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&quot;./fonts/&quot;</span> + filename, <span class="string">&quot;wb&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(r.content)</span><br><span class="line">    text = text.replace(url, <span class="string">&quot;&#x27;./fonts/&quot;</span> + filename +<span class="string">&quot;&#x27;&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&quot;example.css&quot;</span>, <span class="string">&quot;w&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(text)</span><br></pre></td></tr></table></figure><p>credit: <strong>duydb</strong>, <strong>Wytamma Wirth</strong> and <strong>me</strong> who modified it to the better</p><p>resourse: <a href="https://stackoverflow.com/questions/15930003/downloading-a-google-font-and-setting-up-an-offline-site-that-uses-it">https://stackoverflow.com/questions/15930003/downloading-a-google-font-and-setting-up-an-offline-site-that-uses-it</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Download-Google-font-and-use-it-in-offline-html&quot;&gt;&lt;a href=&quot;#Download-Google-font-and-use-it-in-offline-html&quot; class=&quot;headerlink&quot; title</summary>
      
    
    
    
    <category term="google-font" scheme="https://blog.ryankert.cc/categories/google-font/"/>
    
    
    <category term="google-font" scheme="https://blog.ryankert.cc/tags/google-font/"/>
    
  </entry>
  
</feed>
