Jekyll2021-10-31T16:10:38+09:00http://doocong.com/problem-db/atom.xmlDoocong’s Problem DBProblem DB for the FutureDoocongBOJ16163: #15164번_제보2021-02-23T00:00:00+09:002021-02-23T00:00:00+09:00http://doocong.com/problem-db/2021/02/2-BOJ16163<p><a href="https://www.acmicpc.net/problem/16163">https://www.acmicpc.net/problem/16163</a></p>
<ul>
<li>단순한 Manacher 쓰는 문제이다.</li>
<li>Manacher에 이제 익숙해지는것 같다. 대충 이렇게 기억하자.
<ul>
<li>이전 원의 반대편에 있던 것을 활용하되, 이전 원의 bound 를 넘어서선 안된다.</li>
<li>그리고 나서 이전 원의 bound를 넘어서는 부분은 직접 체크한다.</li>
<li>마지막으로 원의 bound가 더 넓어졌는지 업데이트한다.</li>
</ul>
</li>
</ul>
<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">void</span> <span class="nf">manachers</span><span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">S</span><span class="p">,</span> <span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="o">&</span><span class="n">dp</span><span class="p">,</span> <span class="kt">int</span> <span class="n">N</span><span class="p">)</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">r</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">p</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o"><=</span> <span class="n">r</span><span class="p">)</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">dp</span><span class="p">[</span><span class="mi">2</span> <span class="o">*</span> <span class="n">p</span> <span class="o">-</span> <span class="n">i</span><span class="p">],</span> <span class="n">r</span> <span class="o">-</span> <span class="n">i</span><span class="p">);</span>
<span class="k">else</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">while</span> <span class="p">(</span><span class="n">i</span> <span class="o">-</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">>=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">i</span> <span class="o">+</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span> <span class="o"><</span> <span class="n">N</span> <span class="o">&&</span> <span class="n">S</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="n">S</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">++</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">r</span> <span class="o"><</span> <span class="n">i</span> <span class="o">+</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="p">{</span>
<span class="n">r</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">i</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kt">char</span> <span class="n">s</span><span class="p">[</span><span class="mi">2000001</span><span class="p">],</span> <span class="n">ss</span><span class="p">[</span><span class="mi">4000010</span><span class="p">];</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%s"</span><span class="p">,</span> <span class="n">s</span><span class="p">);</span>
<span class="kt">int</span> <span class="n">N</span> <span class="o">=</span> <span class="n">strlen</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">ss</span><span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="sc">'#'</span><span class="p">,</span> <span class="n">ss</span><span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">M</span> <span class="o">=</span> <span class="mi">2</span><span class="o">*</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span>
<span class="n">ss</span><span class="p">[</span><span class="n">M</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="sc">'#'</span><span class="p">,</span> <span class="n">ss</span><span class="p">[</span><span class="n">M</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="n">ans</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">dp</span><span class="p">(</span><span class="n">M</span><span class="p">);</span>
<span class="n">manachers</span><span class="p">(</span><span class="n">ss</span><span class="p">,</span> <span class="n">dp</span><span class="p">,</span> <span class="n">M</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">M</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">ans</span> <span class="o">+=</span> <span class="p">(</span><span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">;</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">ans</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/16163BOJ11570: 환상의 듀엣2021-02-23T00:00:00+09:002021-02-23T00:00:00+09:00http://doocong.com/problem-db/2021/02/1-BOJ11570<p><a href="https://www.acmicpc.net/problem/11570">https://www.acmicpc.net/problem/11570</a></p>
<ul>
<li>아름답게 풀려서 기분좋은 DP 문제</li>
<li>DP Index의 기준을 매번 갱신해주는 문제이다.</li>
<li>단순하게 생각하면 3가지 상태가 필요하다.
<ul>
<li>X: 지금까지본 Index</li>
<li>LA: A 집합에 속한 마지막 Index</li>
<li>LB: B 집합에 속한 마지막 Index</li>
</ul>
</li>
<li>조금만 생각해보면 X는 LA나 LB 둘중 하나와 같다. 즉 아래 두개로 줄일수 있다.
<ul>
<li>X: 지금까지 본 Index</li>
<li>Lother: X를 포함하는 집합이 아닌 집합의 마지막 Index</li>
</ul>
</li>
</ul>
<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">N</span><span class="p">;</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">N</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">N</span> <span class="o"><=</span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">arr</span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o"><=</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
<span class="n">vector</span><span class="o"><</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">>></span> <span class="n">dp</span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="mf">1e9</span><span class="p">));</span>
<span class="n">dp</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">dp</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">dp</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">dp</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">abs</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="n">arr</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span> <span class="n">i</span> <span class="o"><=</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">j</span> <span class="o"><</span> <span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">+</span> <span class="n">abs</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]);</span>
<span class="k">if</span><span class="p">(</span><span class="n">j</span><span class="p">)</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">+</span> <span class="n">abs</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="n">arr</span><span class="p">[</span><span class="n">j</span><span class="p">]));</span>
<span class="k">else</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">dp</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">];</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="n">ans</span> <span class="o">=</span> <span class="mf">1e9</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">ans</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">ans</span><span class="p">,</span> <span class="n">dp</span><span class="p">[</span><span class="n">N</span><span class="p">][</span><span class="n">i</span><span class="p">]);</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">ans</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/11570BOJ1214: 쿨한 물건 구매2021-02-21T00:00:00+09:002021-02-21T00:00:00+09:00http://doocong.com/problem-db/2021/02/1-BOJ1214<p><a href="https://www.acmicpc.net/problem/1214">https://www.acmicpc.net/problem/1214</a></p>
<ul>
<li>솔직히 수론이 너무 어렵다.</li>
<li>이번 문제의 핵심은 5원과 7원이 있을때, 35원마다 패턴이 반복되는 것을 알아차리는 것이다.</li>
<li>그러면 77원을 만들어야 할 때 70 + 7로 연산이 확 줄어든다.</li>
<li>그런데 주의해야할 점이 35 + 13 = 48 같은 경우다.
<ul>
<li>이 경우는 덮어놓고 35를 다 빼버리면 13만 남아서 표현이 안된다.</li>
<li><code class="language-plaintext highlighter-rouge">48 = 4*5 + 4*7</code>로 표현이 가능하다.</li>
<li>즉 <code class="language-plaintext highlighter-rouge">5*7</code>로 나눠서 남기면 안되고, <code class="language-plaintext highlighter-rouge">5*7*2</code>로 나눠서 남겨야한다.</li>
</ul>
</li>
</ul>
<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="k">typedef</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">LL</span><span class="p">;</span>
<span class="n">LL</span> <span class="nf">gcd</span><span class="p">(</span><span class="n">LL</span> <span class="n">a</span><span class="p">,</span> <span class="n">LL</span> <span class="n">b</span><span class="p">){</span><span class="k">return</span> <span class="n">a</span><span class="o">%</span><span class="n">b</span><span class="o">?</span><span class="n">gcd</span><span class="p">(</span><span class="n">b</span><span class="p">,</span><span class="n">a</span><span class="o">%</span><span class="n">b</span><span class="p">)</span><span class="o">:</span><span class="n">b</span><span class="p">;}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">LL</span> <span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">Q</span><span class="p">;</span>
<span class="n">cin</span> <span class="o">>></span> <span class="n">Q</span> <span class="o">>></span> <span class="n">X</span> <span class="o">>></span> <span class="n">Y</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">Y</span> <span class="o">></span> <span class="n">X</span><span class="p">)</span> <span class="n">swap</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">);</span>
<span class="n">LL</span> <span class="n">opp</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">LL</span> <span class="n">lcm</span> <span class="o">=</span> <span class="n">X</span> <span class="o">*</span> <span class="n">Y</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">Q</span> <span class="o">%</span> <span class="n">lcm</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">Q</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">LL</span> <span class="n">rQ</span> <span class="o">=</span> <span class="p">(</span><span class="n">Q</span> <span class="o">/</span> <span class="n">lcm</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">lcm</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">rQ</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> <span class="n">rQ</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">Q</span> <span class="o">=</span> <span class="n">Q</span> <span class="o">-</span> <span class="n">rQ</span><span class="p">;</span>
<span class="n">LL</span> <span class="n">cur</span> <span class="o">=</span> <span class="p">(</span><span class="n">Q</span> <span class="o">/</span> <span class="n">X</span><span class="p">)</span> <span class="o">*</span> <span class="n">X</span> <span class="o">+</span> <span class="p">(</span><span class="n">Q</span> <span class="o">%</span> <span class="n">X</span> <span class="o">?</span> <span class="n">X</span> <span class="o">:</span> <span class="mi">0</span><span class="p">);</span>
<span class="n">LL</span> <span class="n">ans</span> <span class="o">=</span> <span class="n">cur</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="n">cur</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="cm">/* printf("%lld + %lld = %lld, %lld\n", cur, opp, cur + opp, Q); */</span>
<span class="n">ans</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">ans</span><span class="p">,</span> <span class="n">cur</span> <span class="o">+</span> <span class="n">opp</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">cur</span> <span class="o">+</span> <span class="n">opp</span> <span class="o">==</span> <span class="n">Q</span><span class="p">)</span>
<span class="k">break</span><span class="p">;</span>
<span class="n">cur</span> <span class="o">-=</span> <span class="n">X</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">R</span> <span class="o">=</span> <span class="n">Q</span> <span class="o">-</span> <span class="n">cur</span><span class="p">;</span>
<span class="n">opp</span> <span class="o">=</span> <span class="p">(</span><span class="n">R</span> <span class="o">/</span> <span class="n">Y</span><span class="p">)</span> <span class="o">*</span> <span class="n">Y</span> <span class="o">+</span> <span class="p">(</span><span class="n">R</span> <span class="o">%</span> <span class="n">Y</span> <span class="o">?</span> <span class="n">Y</span> <span class="o">:</span> <span class="mi">0</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">rQ</span> <span class="o">+</span> <span class="n">ans</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/1214BOJ1007: 벡터 매칭2021-02-19T00:00:00+09:002021-02-19T00:00:00+09:00http://doocong.com/problem-db/2021/02/1-BOJ1007<p><a href="https://www.acmicpc.net/problem/1007">https://www.acmicpc.net/problem/1007</a></p>
<ul>
<li>수학 + 완전탐색 문제</li>
<li>백터의 연산에서 교환법칙이 적용된다는걸 알아야 하는 중요한 교훈</li>
</ul>
<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="k">struct</span> <span class="nc">Point</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">;</span>
<span class="n">Point</span> <span class="o">&</span><span class="k">operator</span><span class="o">+=</span><span class="p">(</span><span class="n">Point</span><span class="o">&</span> <span class="n">b</span><span class="p">)</span> <span class="p">{</span>
<span class="n">x</span> <span class="o">+=</span> <span class="n">b</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">+=</span> <span class="n">b</span><span class="p">.</span><span class="n">y</span><span class="p">;</span>
<span class="k">return</span> <span class="o">*</span><span class="k">this</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="k">class</span> <span class="nc">Problem</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">N</span><span class="p">;</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="n">ans</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="n">Point</span><span class="o">></span> <span class="n">arr</span><span class="p">;</span>
<span class="nl">public:</span>
<span class="kt">void</span> <span class="n">input</span><span class="p">()</span> <span class="p">{</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">N</span><span class="p">);</span>
<span class="n">arr</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">N</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%d%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">x</span><span class="p">,</span> <span class="o">&</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">y</span><span class="p">);</span>
<span class="p">}</span>
<span class="kt">void</span> <span class="n">iter</span><span class="p">(</span><span class="kt">int</span> <span class="n">k</span><span class="p">,</span> <span class="kt">int</span> <span class="n">remain</span><span class="p">,</span> <span class="kt">int</span> <span class="n">picked</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">remain</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">check</span><span class="p">(</span><span class="n">picked</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">iter</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">remain</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">picked</span> <span class="o">|</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="n">i</span><span class="p">));</span>
<span class="p">}</span>
<span class="kt">void</span> <span class="n">check</span><span class="p">(</span><span class="kt">int</span> <span class="n">picked</span><span class="p">)</span> <span class="p">{</span>
<span class="n">Point</span> <span class="n">A</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">}</span> <span class="p">,</span> <span class="n">B</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">};;</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">picked</span> <span class="o">&</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="n">i</span><span class="p">))</span>
<span class="n">A</span> <span class="o">+=</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="k">else</span>
<span class="n">B</span> <span class="o">+=</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="p">}</span>
<span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span> <span class="o">=</span> <span class="n">A</span><span class="p">.</span><span class="n">x</span> <span class="o">-</span> <span class="n">B</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">A</span><span class="p">.</span><span class="n">y</span> <span class="o">-</span> <span class="n">B</span><span class="p">.</span><span class="n">y</span><span class="p">;</span>
<span class="n">ans</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">ans</span><span class="p">,</span> <span class="n">x</span><span class="o">*</span><span class="n">x</span> <span class="o">+</span> <span class="n">y</span><span class="o">*</span><span class="n">y</span><span class="p">);</span>
<span class="p">}</span>
<span class="kt">double</span> <span class="n">solve</span><span class="p">()</span> <span class="p">{</span>
<span class="n">ans</span> <span class="o">=</span> <span class="mf">1e18</span><span class="p">;</span>
<span class="n">input</span><span class="p">();</span>
<span class="n">iter</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="k">return</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">ans</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">TC</span><span class="p">;</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">TC</span><span class="p">);</span>
<span class="k">while</span><span class="p">(</span><span class="n">TC</span><span class="o">--</span><span class="p">)</span> <span class="p">{</span>
<span class="n">Problem</span> <span class="n">prob</span><span class="p">;</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%.12lf</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">prob</span><span class="p">.</span><span class="n">solve</span><span class="p">());</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/1007BOJ13549: 숨바꼭질 32021-02-15T00:00:00+09:002021-02-15T00:00:00+09:00http://doocong.com/problem-db/2021/02/2-BOJ13549<p><a href="https://www.acmicpc.net/problem/13549">https://www.acmicpc.net/problem/13549</a></p>
<ul>
<li>0-1 BFS라고 덱을 쓰는 BFS를 처음 봤다.</li>
<li>근데 0-1으로 풀면 덱에 최소거리를 저장해야 해서 불편한듯</li>
<li>그냥 BFS로 레벨 고려해가면서 집어넣는게 편하다.</li>
</ul>
<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">Graph</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="p">,</span> <span class="n">sz</span><span class="p">,</span> <span class="n">depth</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">zero</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">visit</span><span class="p">;</span>
<span class="n">queue</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">q</span><span class="p">;</span>
<span class="nl">public:</span>
<span class="kt">void</span> <span class="n">input</span><span class="p">()</span> <span class="p">{</span>
<span class="n">cin</span> <span class="o">>></span> <span class="n">A</span> <span class="o">>></span> <span class="n">B</span><span class="p">;</span>
<span class="n">visit</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="mi">200001</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">A</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="n">zero</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">A</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">bool</span> <span class="n">travelPow2</span><span class="p">(</span><span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">n</span><span class="p">;</span> <span class="n">i</span> <span class="o">></span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">/=</span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="n">A</span><span class="p">)</span> <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">visit</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
<span class="n">q</span><span class="p">.</span><span class="n">push</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="n">visit</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">i</span> <span class="o">%</span> <span class="mi">2</span><span class="p">)</span> <span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="n">bfs</span><span class="p">()</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">A</span> <span class="o">>=</span> <span class="n">B</span><span class="p">)</span>
<span class="k">return</span> <span class="n">A</span> <span class="o">-</span> <span class="n">B</span> <span class="o">+</span> <span class="n">zero</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">travelPow2</span><span class="p">(</span><span class="n">B</span><span class="p">))</span>
<span class="k">return</span> <span class="mi">0</span> <span class="o">+</span> <span class="n">zero</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="n">q</span><span class="p">.</span><span class="n">size</span><span class="p">())</span> <span class="p">{</span>
<span class="n">depth</span><span class="o">++</span><span class="p">,</span> <span class="n">sz</span> <span class="o">=</span> <span class="n">q</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">s</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">s</span> <span class="o"><</span> <span class="n">sz</span><span class="p">;</span> <span class="n">s</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">cur</span> <span class="o">=</span> <span class="n">q</span><span class="p">.</span><span class="n">front</span><span class="p">();</span> <span class="n">q</span><span class="p">.</span><span class="n">pop</span><span class="p">();</span>
<span class="k">if</span> <span class="p">(</span><span class="n">travelPow2</span><span class="p">(</span><span class="n">cur</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
<span class="k">return</span> <span class="n">depth</span> <span class="o">+</span> <span class="n">zero</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">travelPow2</span><span class="p">(</span><span class="n">cur</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
<span class="k">return</span> <span class="n">depth</span> <span class="o">+</span> <span class="n">zero</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">invalid_argument</span><span class="p">(</span> <span class="s">"Not Reachable"</span> <span class="p">);</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">Graph</span> <span class="n">g</span><span class="p">;</span>
<span class="n">g</span><span class="p">.</span><span class="n">input</span><span class="p">();</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">g</span><span class="p">.</span><span class="n">bfs</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/13549BOJ2294: 동전 22021-02-15T00:00:00+09:002021-02-15T00:00:00+09:00http://doocong.com/problem-db/2021/02/1-BOJ2294<p><a href="https://www.acmicpc.net/problem/2294">https://www.acmicpc.net/problem/2294</a></p>
<ul>
<li>거의 6달치를 날리고 오랜만에 쓰는 문제풀이</li>
<li>이제 열심이 풀어서 익스를 따야지 -_-</li>
<li>문제 자체는 심플한 무한대 냅색문제</li>
</ul>
<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">Solution</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">N</span><span class="p">,</span> <span class="n">K</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">arr</span><span class="p">,</span> <span class="n">dp</span><span class="p">;</span>
<span class="nl">public:</span>
<span class="kt">void</span> <span class="n">input</span><span class="p">()</span> <span class="p">{</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%d%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">N</span><span class="p">,</span> <span class="o">&</span><span class="n">K</span><span class="p">);</span>
<span class="n">arr</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">N</span><span class="p">);</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">scanf</span><span class="p">(</span><span class="s">"%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
<span class="n">dp</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">K</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="mh">0xffff</span><span class="p">);</span>
<span class="n">dp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="n">solve</span><span class="p">()</span> <span class="p">{</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> <span class="n">j</span> <span class="o"><=</span> <span class="n">K</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span>
<span class="n">dp</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">dp</span><span class="p">[</span><span class="n">j</span><span class="p">],</span> <span class="n">dp</span><span class="p">[</span><span class="n">j</span> <span class="o">-</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
<span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">K</span><span class="p">];</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">Solution</span> <span class="n">sol</span><span class="p">;</span>
<span class="n">sol</span><span class="p">.</span><span class="n">input</span><span class="p">();</span>
<span class="kt">int</span> <span class="n">ret</span> <span class="o">=</span> <span class="n">sol</span><span class="p">.</span><span class="n">solve</span><span class="p">();</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="p">(</span><span class="n">ret</span> <span class="o">==</span> <span class="mh">0xffff</span> <span class="o">?</span> <span class="o">-</span><span class="mi">1</span> <span class="o">:</span> <span class="n">ret</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/2294BOJ11657: 타임머신2020-06-10T00:00:00+09:002020-06-10T00:00:00+09:00http://doocong.com/problem-db/2020/06/1-BOJ11657<p><a href="https://www.acmicpc.net/problem/11657">https://www.acmicpc.net/problem/11657</a></p>
<ul>
<li>요새는 Go가 재미남.. 재채점 당해서 눈물의 탈락을 한 벨만포드 다시 구현</li>
<li>처음에 요상하게 구현한것 같은데, 다시 정리해보자
<ul>
<li>안정성을 위해서 무조건 V * E 번 돈다</li>
<li>flag를 두어서 dist의 업데이트가 없다면 나간다.</li>
<li>V번동안 계속 업데이트 된다면, 음의 사이클이 있는것이다.</li>
</ul>
</li>
</ul>
<div class="language-go highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">package</span> <span class="n">main</span>
<span class="k">import</span> <span class="p">(</span>
<span class="s">"bufio"</span>
<span class="s">"fmt"</span>
<span class="s">"os"</span>
<span class="p">)</span>
<span class="k">const</span> <span class="n">INF</span> <span class="kt">int</span> <span class="o">=</span> <span class="m">1000000000</span>
<span class="k">type</span> <span class="n">Edge</span> <span class="k">struct</span> <span class="p">{</span>
<span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">cost</span> <span class="kt">int</span>
<span class="p">}</span>
<span class="k">func</span> <span class="n">bellmanFord</span><span class="p">(</span><span class="n">n</span> <span class="kt">int</span><span class="p">,</span> <span class="n">edges</span> <span class="p">[]</span><span class="n">Edge</span><span class="p">)</span> <span class="p">(</span><span class="n">dist</span> <span class="p">[]</span><span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
<span class="n">dist</span> <span class="o">=</span> <span class="nb">make</span><span class="p">([]</span><span class="kt">int</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="o">:=</span> <span class="k">range</span> <span class="n">dist</span> <span class="p">{</span>
<span class="n">dist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">INF</span>
<span class="p">}</span>
<span class="n">dist</span><span class="p">[</span><span class="m">1</span><span class="p">]</span> <span class="o">=</span> <span class="m">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="o">:=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">n</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span> <span class="p">{</span>
<span class="n">flag</span> <span class="o">:=</span> <span class="no">false</span>
<span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">e</span> <span class="o">:=</span> <span class="k">range</span> <span class="n">edges</span> <span class="p">{</span>
<span class="k">if</span> <span class="n">dist</span><span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">u</span><span class="p">]</span> <span class="o">>=</span> <span class="n">INF</span> <span class="p">{</span>
<span class="k">continue</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">dist</span><span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">v</span><span class="p">]</span> <span class="o">></span> <span class="n">dist</span><span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">u</span><span class="p">]</span><span class="o">+</span><span class="n">e</span><span class="o">.</span><span class="n">cost</span> <span class="p">{</span>
<span class="n">dist</span><span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">dist</span><span class="p">[</span><span class="n">e</span><span class="o">.</span><span class="n">u</span><span class="p">]</span> <span class="o">+</span> <span class="n">e</span><span class="o">.</span><span class="n">cost</span>
<span class="n">flag</span> <span class="o">=</span> <span class="no">true</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span> <span class="o">!</span><span class="n">flag</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">dist</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">return</span> <span class="p">[]</span><span class="kt">int</span><span class="p">{}</span>
<span class="p">}</span>
<span class="k">func</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">r</span> <span class="o">:=</span> <span class="n">bufio</span><span class="o">.</span><span class="n">NewReader</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">Stdin</span><span class="p">)</span>
<span class="k">var</span> <span class="n">n</span><span class="p">,</span> <span class="n">m</span> <span class="kt">int</span>
<span class="n">fmt</span><span class="o">.</span><span class="n">Fscan</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="o">&</span><span class="n">n</span><span class="p">,</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span>
<span class="n">edges</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">([]</span><span class="n">Edge</span><span class="p">,</span> <span class="n">m</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="o">:=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">m</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span> <span class="p">{</span>
<span class="n">e</span> <span class="o">:=</span> <span class="o">&</span><span class="n">edges</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">fmt</span><span class="o">.</span><span class="n">Fscan</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="o">&</span><span class="n">e</span><span class="o">.</span><span class="n">u</span><span class="p">,</span> <span class="o">&</span><span class="n">e</span><span class="o">.</span><span class="n">v</span><span class="p">,</span> <span class="o">&</span><span class="n">e</span><span class="o">.</span><span class="n">cost</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">dist</span> <span class="o">:=</span> <span class="n">bellmanFord</span><span class="p">(</span><span class="n">n</span><span class="o">+</span><span class="m">1</span><span class="p">,</span> <span class="n">edges</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">dist</span><span class="p">)</span> <span class="o">==</span> <span class="m">0</span> <span class="p">{</span>
<span class="n">fmt</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="o">-</span><span class="m">1</span><span class="p">)</span>
<span class="k">return</span>
<span class="p">}</span>
<span class="k">for</span> <span class="n">i</span> <span class="o">:=</span> <span class="m">2</span><span class="p">;</span> <span class="n">i</span> <span class="o"><=</span> <span class="n">n</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span> <span class="p">{</span>
<span class="k">if</span> <span class="n">dist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">INF</span> <span class="p">{</span>
<span class="n">dist</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="m">1</span>
<span class="p">}</span>
<span class="n">fmt</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">dist</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/11657BOJ1029: 그림 교환2020-06-01T00:00:00+09:002020-06-01T00:00:00+09:00http://doocong.com/problem-db/2020/06/1-BOJ1029<p><a href="https://www.acmicpc.net/problem/1029">https://www.acmicpc.net/problem/1029</a></p>
<ul>
<li>흔한 bitmask dp이다. bottom-up으로 짜면, sliding windows를 할 수 있다.</li>
<li>N=15를 보면 당연히 bitmask를 떠올려야 한다.</li>
</ul>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">N</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="n">string</span><span class="o">></span> <span class="n">arr</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">dp</span><span class="p">[</span><span class="mi">15</span><span class="p">][</span><span class="mi">10</span><span class="p">][</span><span class="mi">1</span><span class="o"><<</span><span class="mi">15</span><span class="p">];</span>
<span class="kt">int</span> <span class="nf">go</span><span class="p">(</span><span class="kt">int</span> <span class="n">owner</span><span class="p">,</span> <span class="kt">int</span> <span class="n">price</span><span class="p">,</span> <span class="kt">int</span> <span class="n">visit</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">dp</span><span class="p">[</span><span class="n">owner</span><span class="p">][</span><span class="n">price</span><span class="p">][</span><span class="n">visit</span><span class="p">]</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">owner</span><span class="p">][</span><span class="n">price</span><span class="p">][</span><span class="n">visit</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">ans</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">next</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">next</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">next</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">visit</span> <span class="o">&</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="n">next</span><span class="p">))</span> <span class="k">continue</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">owner</span><span class="p">][</span><span class="n">next</span><span class="p">]</span> <span class="o"><</span> <span class="n">price</span><span class="p">)</span> <span class="k">continue</span><span class="p">;</span>
<span class="n">ans</span> <span class="o">=</span> <span class="n">max</span><span class="p">(</span><span class="n">ans</span><span class="p">,</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">go</span><span class="p">(</span><span class="n">next</span><span class="p">,</span> <span class="n">arr</span><span class="p">[</span><span class="n">owner</span><span class="p">][</span><span class="n">next</span><span class="p">],</span> <span class="n">visit</span> <span class="o">|</span> <span class="p">(</span><span class="mi">1</span> <span class="o"><<</span> <span class="n">next</span><span class="p">)));</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">owner</span><span class="p">][</span><span class="n">price</span><span class="p">][</span><span class="n">visit</span><span class="p">]</span> <span class="o">=</span> <span class="n">ans</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">cin</span> <span class="o">>></span> <span class="n">N</span><span class="p">;</span>
<span class="n">arr</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">N</span><span class="p">);</span>
<span class="n">memset</span><span class="p">(</span><span class="n">dp</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">dp</span><span class="p">));</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">cin</span> <span class="o">>></span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="k">for</span><span class="p">(</span><span class="n">string</span><span class="o">&</span> <span class="n">s</span> <span class="o">:</span> <span class="n">arr</span><span class="p">)</span>
<span class="k">for</span><span class="p">(</span><span class="kt">char</span><span class="o">&</span> <span class="n">c</span><span class="o">:</span> <span class="n">s</span><span class="p">)</span>
<span class="n">c</span> <span class="o">-=</span> <span class="sc">'0'</span><span class="p">;</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">go</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/1029BOJ2449: 전구2020-05-31T00:00:00+09:002020-05-31T00:00:00+09:00http://doocong.com/problem-db/2020/05/1-BOJ2449<p><a href="https://www.acmicpc.net/problem/2449">https://www.acmicpc.net/problem/2449</a></p>
<ul>
<li>범위 위주의 DP</li>
<li>솔직히 점화식 도출해내는게 쉽지는 않다.</li>
</ul>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="kt">int</span> <span class="n">N</span><span class="p">,</span> <span class="n">K</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">arr</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">>></span> <span class="n">dp</span><span class="p">;</span>
<span class="kt">int</span> <span class="nf">go</span><span class="p">(</span><span class="kt">int</span> <span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">dp</span><span class="p">[</span><span class="n">s</span><span class="p">][</span><span class="n">e</span><span class="p">]</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">s</span><span class="p">][</span><span class="n">e</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">ans</span> <span class="o">=</span> <span class="n">INT_MAX</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">s</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">e</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="k">if</span><span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">ans</span> <span class="o">=</span> <span class="n">min</span><span class="p">(</span><span class="n">ans</span><span class="p">,</span> <span class="n">go</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="n">go</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">arr</span><span class="p">[</span><span class="n">s</span><span class="p">]</span> <span class="o">!=</span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">]));</span>
<span class="k">if</span><span class="p">(</span><span class="n">ans</span> <span class="o">==</span> <span class="n">INT_MAX</span><span class="p">)</span> <span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">s</span><span class="p">][</span><span class="n">e</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">return</span> <span class="n">dp</span><span class="p">[</span><span class="n">s</span><span class="p">][</span><span class="n">e</span><span class="p">]</span> <span class="o">=</span> <span class="n">ans</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n">cin</span> <span class="o">>></span> <span class="n">N</span> <span class="o">>></span> <span class="n">K</span><span class="p">;</span>
<span class="n">arr</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">N</span><span class="p">);</span>
<span class="n">dp</span><span class="p">.</span><span class="n">resize</span><span class="p">(</span><span class="n">N</span><span class="p">,</span> <span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="p">(</span><span class="n">N</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">));</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">N</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="n">cin</span> <span class="o">>></span> <span class="n">arr</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">go</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">N</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/2449BOJ17144: 미세먼지 안녕!2020-05-17T00:00:00+09:002020-05-17T00:00:00+09:00http://doocong.com/problem-db/2020/05/1-BOJ17144<p><a href="https://www.acmicpc.net/problem/17144">https://www.acmicpc.net/problem/17144</a></p>
<ul>
<li>침착함이 중요한 시뮬레이션 문제.</li>
<li>일단 생각한대로 풀었다는것에 만족</li>
</ul>
<div class="language-c++ highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include <bits/stdc++.h>
</span><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
<span class="k">struct</span> <span class="nc">Problem</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">R</span><span class="p">,</span> <span class="n">C</span><span class="p">,</span> <span class="n">T</span><span class="p">,</span> <span class="n">UH</span><span class="p">,</span> <span class="n">BH</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">>></span> <span class="n">room</span><span class="p">,</span> <span class="n">bak</span><span class="p">;</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">dx</span> <span class="o">=</span> <span class="p">{</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">};</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">dy</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">};</span>
<span class="n">Problem</span><span class="p">(</span><span class="kt">int</span> <span class="n">r</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">,</span> <span class="kt">int</span> <span class="n">t</span><span class="p">)</span><span class="o">:</span> <span class="n">room</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="p">(</span><span class="n">c</span><span class="p">))</span> <span class="p">{</span>
<span class="n">R</span> <span class="o">=</span> <span class="n">r</span><span class="p">,</span> <span class="n">C</span> <span class="o">=</span> <span class="n">c</span><span class="p">,</span> <span class="n">T</span> <span class="o">=</span> <span class="n">t</span><span class="p">;</span>
<span class="n">UH</span> <span class="o">=</span> <span class="n">BH</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">bool</span> <span class="n">bound</span><span class="p">(</span><span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="kt">int</span> <span class="n">y</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">x</span> <span class="o">>=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">y</span> <span class="o">>=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">x</span> <span class="o"><</span> <span class="n">R</span> <span class="o">&&</span> <span class="n">y</span> <span class="o"><</span> <span class="n">C</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">bool</span> <span class="n">boundU</span><span class="p">(</span><span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="kt">int</span> <span class="n">y</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">x</span> <span class="o">>=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">y</span> <span class="o">>=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">x</span> <span class="o"><=</span> <span class="n">UH</span> <span class="o">&&</span> <span class="n">y</span> <span class="o"><</span> <span class="n">C</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">bool</span> <span class="n">boundB</span><span class="p">(</span><span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="kt">int</span> <span class="n">y</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="n">x</span> <span class="o">>=</span> <span class="n">BH</span> <span class="o">&&</span> <span class="n">y</span> <span class="o">>=</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">x</span> <span class="o"><</span> <span class="n">R</span> <span class="o">&&</span> <span class="n">y</span> <span class="o"><</span> <span class="n">C</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">void</span> <span class="n">setDust</span><span class="p">(</span><span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="kt">int</span> <span class="n">y</span><span class="p">,</span> <span class="kt">int</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span>
<span class="n">room</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">y</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">v</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> <span class="o">&&</span> <span class="o">!</span><span class="n">UH</span><span class="p">)</span> <span class="n">UH</span> <span class="o">=</span> <span class="n">x</span><span class="p">;</span>
<span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">v</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="n">BH</span> <span class="o">=</span> <span class="n">x</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">int</span> <span class="n">spread</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">sum</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">bak</span> <span class="o">=</span> <span class="n">room</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">x</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">x</span> <span class="o"><</span> <span class="n">R</span><span class="p">;</span> <span class="n">x</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">y</span> <span class="o"><</span> <span class="n">C</span><span class="p">;</span> <span class="n">y</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">room</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">y</span><span class="p">]</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span> <span class="k">continue</span><span class="p">;</span>
<span class="n">sum</span> <span class="o">+=</span> <span class="n">room</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">y</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">k</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">k</span> <span class="o"><</span> <span class="mi">4</span><span class="p">;</span> <span class="n">k</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">nx</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">[</span><span class="n">k</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">ny</span> <span class="o">=</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">[</span><span class="n">k</span><span class="p">];</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">bound</span><span class="p">(</span><span class="n">nx</span><span class="p">,</span><span class="n">ny</span><span class="p">))</span> <span class="k">continue</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">room</span><span class="p">[</span><span class="n">nx</span><span class="p">][</span><span class="n">ny</span><span class="p">]</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="k">continue</span><span class="p">;</span>
<span class="n">bak</span><span class="p">[</span><span class="n">nx</span><span class="p">][</span><span class="n">ny</span><span class="p">]</span> <span class="o">+=</span> <span class="n">room</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">y</span><span class="p">]</span><span class="o">/</span><span class="mi">5</span><span class="p">;</span>
<span class="n">cnt</span><span class="o">++</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">bak</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">y</span><span class="p">]</span> <span class="o">-=</span> <span class="n">room</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">y</span><span class="p">]</span><span class="o">/</span><span class="mi">5</span><span class="o">*</span><span class="n">cnt</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">room</span> <span class="o">=</span> <span class="n">bak</span><span class="p">;</span>
<span class="k">return</span> <span class="n">sum</span><span class="p">;</span>
<span class="p">}</span>
<span class="kt">void</span> <span class="n">print</span><span class="p">()</span> <span class="p">{</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">R</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">j</span> <span class="o"><</span> <span class="n">C</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%3d"</span><span class="p">,</span> <span class="n">room</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]);</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">bx</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">};</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">by</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">};</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">ux</span> <span class="o">=</span> <span class="p">{</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">};</span>
<span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">uy</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">};</span>
<span class="kt">void</span> <span class="n">circulate</span><span class="p">(</span><span class="kt">int</span> <span class="n">s</span><span class="p">,</span> <span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">>&</span> <span class="n">dx</span><span class="p">,</span> <span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">>&</span> <span class="n">dy</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">x</span> <span class="o">=</span> <span class="n">s</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">nx</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="kt">int</span> <span class="n">ny</span> <span class="o">=</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="k">if</span><span class="p">(</span><span class="n">s</span> <span class="o">==</span> <span class="n">UH</span> <span class="o">&&</span> <span class="o">!</span><span class="n">boundU</span><span class="p">(</span><span class="n">nx</span><span class="p">,</span> <span class="n">ny</span><span class="p">)</span> <span class="o">||</span> <span class="n">s</span> <span class="o">==</span> <span class="n">BH</span> <span class="o">&&</span> <span class="o">!</span><span class="n">boundB</span><span class="p">(</span><span class="n">nx</span><span class="p">,</span> <span class="n">ny</span><span class="p">))</span> <span class="p">{</span>
<span class="n">i</span><span class="o">++</span><span class="p">;</span>
<span class="n">nx</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="n">ny</span> <span class="o">=</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="p">}</span>
<span class="n">swap</span><span class="p">(</span><span class="n">room</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="n">y</span><span class="p">],</span> <span class="n">room</span><span class="p">[</span><span class="n">nx</span><span class="p">][</span><span class="n">ny</span><span class="p">]);</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">nx</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">ny</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">x</span> <span class="o">==</span> <span class="n">s</span> <span class="o">&&</span> <span class="n">y</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kt">void</span> <span class="n">solve</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">sum</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="n">T</span><span class="o">--</span><span class="p">)</span> <span class="p">{</span>
<span class="n">sum</span> <span class="o">=</span> <span class="n">spread</span><span class="p">();</span>
<span class="n">sum</span> <span class="o">-=</span> <span class="n">room</span><span class="p">[</span><span class="n">UH</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">];</span>
<span class="n">sum</span> <span class="o">-=</span> <span class="n">room</span><span class="p">[</span><span class="n">BH</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">];</span>
<span class="k">if</span><span class="p">(</span><span class="n">sum</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="k">break</span><span class="p">;</span>
<span class="n">room</span><span class="p">[</span><span class="n">UH</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">room</span><span class="p">[</span><span class="n">BH</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">circulate</span><span class="p">(</span><span class="n">UH</span><span class="p">,</span> <span class="n">ux</span><span class="p">,</span> <span class="n">uy</span><span class="p">);</span>
<span class="n">circulate</span><span class="p">(</span><span class="n">BH</span><span class="p">,</span> <span class="n">bx</span><span class="p">,</span> <span class="n">by</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">cout</span> <span class="o"><<</span> <span class="n">sum</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">};</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="kt">int</span> <span class="n">R</span><span class="p">,</span> <span class="n">C</span><span class="p">,</span> <span class="n">T</span><span class="p">,</span> <span class="n">tmp</span><span class="p">;</span>
<span class="n">ios</span><span class="o">::</span><span class="n">sync_with_stdio</span><span class="p">(</span><span class="nb">false</span><span class="p">);</span>
<span class="n">cin</span> <span class="o">>></span> <span class="n">R</span> <span class="o">>></span> <span class="n">C</span> <span class="o">>></span> <span class="n">T</span><span class="p">;</span>
<span class="n">Problem</span> <span class="n">prob</span><span class="p">(</span><span class="n">R</span><span class="p">,</span><span class="n">C</span><span class="p">,</span><span class="n">T</span><span class="p">);</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">R</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">j</span> <span class="o"><</span> <span class="n">C</span><span class="p">;</span> <span class="n">j</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="n">cin</span> <span class="o">>></span> <span class="n">tmp</span><span class="p">;</span>
<span class="n">prob</span><span class="p">.</span><span class="n">setDust</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">tmp</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">prob</span><span class="p">.</span><span class="n">solve</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div></div>Dooconghttps://www.acmicpc.net/problem/17144