<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/kyoupuro/">
    <title>kyoupuro @ ウィキ</title>
    <link>http://w.atwiki.jp/kyoupuro/</link>
    <atom:link href="https://w.atwiki.jp/kyoupuro/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>kyoupuro @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2013-01-22T17:24:19+09:00</dc:date>
    <utime>1358843059</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/79.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/78.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/77.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/76.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/75.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/74.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/73.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/72.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/71.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kyoupuro/pages/70.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/79.html">
    <title>When Can We Meet?</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/79.html</link>
    <description>
      **1124 : When Can We Meet?

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1124]]

***解説
なるべく多くの人数が参加できるような日程を探す問題。
何日に何人が参加できるかを記憶しておき、それを元に参加人数が最大でかつ最短の日にちを探索すればいい。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 using namespace std;
  
 int main() {
     int n, q;
     while (cin &gt;&gt; n &gt;&gt; q) {
         if (n == 0 &amp;&amp; q == 0) break;
      
         int day[100] = {0};
         int m, d;
         for (int i = 0; i &lt; n; ++i) {
             cin &gt;&gt; m;
             for (int j = 0; j &lt; m; ++j) {
                 cin &gt;&gt; d;
                 ++day[d];
             }
         }
  
         int max = 0, max_i = 0;
         for (int i = 0; i &lt; 100; ++i) {
             if (max &lt; day[i]) {
                 max = day[i];
                 max_i = i;
             }
         }
 
         if (max &gt;= q) {
             cout &lt;&lt; max_i &lt;&lt; endl;
         } else {
             cout &lt;&lt; 0 &lt;&lt; endl;
         }
     }
  
     return 0;
 }
#endregio    </description>
    <dc:date>2013-01-22T17:24:19+09:00</dc:date>
    <utime>1358843059</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/78.html">
    <title>Exploring Caves</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/78.html</link>
    <description>
      **1119 : Exploring Caves 

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1119]]

***解説
スタート位置から最も遠い部屋の座標を答える問題。
今の位置からのどれだけ移動するかが入力で与えられるので、その通りに移動して逐一距離を計算すればいい。

英語の勉強しましょう。

***プログラム
***C

***C++
#region
 #include&lt;iostream&gt;
 using namespace std;
 
 int main(){
 	int n;
 	cin &gt;&gt; n;
 	for (int i = 0; i &lt; n; i++) {
 		int x = 0, y = 0;
 		int dx, dy;
 		int max = 0, tx, ty; 
 		while (cin &gt;&gt; dx &gt;&gt; dy, dx || dy) {
 			x += dx;
 			y += dy;
 			int d = x*x + y*y;
 			if (max &lt; d) {
 				max = d;
 				tx = x;
				ty = y;
 			}
 			else if (max == d &amp;&amp; tx &lt; x) {
 				tx = x;
 				ty = y;
 			}
 		}
 
 		cout &lt;&lt; tx &lt;&lt; &quot; &quot; &lt;&lt; ty &lt;&lt; endl;
 	}
 	
 	return 0;
 }
#endregion

***Java    </description>
    <dc:date>2013-01-17T20:06:29+09:00</dc:date>
    <utime>1358420789</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/77.html">
    <title>Flying Jenny</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/77.html</link>
    <description>
      **0082 : Flying Jenny

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0082]]

***解説
条件に合うようなメリーゴーランドの並べ方を出力する。
メリーゴーランドの並び方は8種類なので、先に並び方を全て配列に格納しておき、
小さいほうから順に調べていけばいい。

ただ、最小値を求めるとき、最初の値が小さいとWAになってしまうので注意([[10000]]でもWAになった)。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 #include &lt;string&gt;
 #include &lt;climits&gt;
 using namespace std;
 
 string pos[] = {
	&quot;12121414&quot;,
 	&quot;12141412&quot;,
 	&quot;14121214&quot;,
 	&quot;14141212&quot;,
 	&quot;21214141&quot;,
 	&quot;21414121&quot;,
 	&quot;41212141&quot;,
 	&quot;41412121&quot;,
 };
 
 int main() {
 	int n[8];
 	while (cin &gt;&gt; n[0] &gt;&gt; n[1] &gt;&gt; n[2] &gt;&gt; n[3] &gt;&gt; n[4] &gt;&gt; n[5] &gt;&gt; n[6] &gt;&gt; n[7]) {
 		int min = INT_MAX;
 		string ans;
 		for (int i = 0; i &lt; 8; i++) {
 			int sum = 0;
 			for (int j = 0; j &lt; 8; j++) {
				int a = n[j] - (pos[i][j] - &#039;0&#039;);
 				if (a &lt; 0) a = 0;
 				sum += a;
 			}
 
 			if (min &gt; sum) {
 				ans = pos[i];
 				min = sum;
 			}
		}
 
 		cout &lt;&lt; ans[0];
 		for (int i = 1; i &lt; 8; i++) {
 			cout &lt;&lt; &quot; &quot; &lt;&lt; ans[i    </description>
    <dc:date>2013-01-14T16:28:27+09:00</dc:date>
    <utime>1358148507</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/76.html">
    <title>Joseph&#039;s Potato</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/76.html</link>
    <description>
      **0085 : Joseph&#039;s Potato

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0085]]

***解説
Joseph&#039;s Potatoというゲームのルールに従って、最後に残る人の番号を答える問題。
一人になるまでループを使ってシミュレーションすればいい。
どの番号が残っているかという情報を記憶する配列があると楽。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 using namespace std;
 
 int main() {
 	int m, n;
 
 	while (cin &gt;&gt; m &gt;&gt; n, m || n) {
 		int p[1000] = {0}, cnt = 1, res = m, num;		
 		for (int i = 0; ; i++) {
 			if (res == 1 &amp;&amp; p[i%m] == 0) {
 				num = i%m;
 				break;
 			}
			if (p[i%m]) continue;
 
 			if (cnt == n) {
  				p[i%m] = 1;
  				res--;
 				cnt = 1;
 			} else {
  				cnt++;
  			}
  		}
  
  		cout &lt;&lt; num+1 &lt;&lt; endl;
  	}
 
  	return 0;
 } 
#endregion

***Java    </description>
    <dc:date>2013-01-14T15:44:09+09:00</dc:date>
    <utime>1358145849</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/75.html">
    <title>Cleaning Robot</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/75.html</link>
    <description>
      **1020 : Cleaning Robot

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1020]]

***解説
ロボットが移動した後に指定された場所にいるか確率を答える問題。
全探索しようとすると時間がかかりすぎるので、各部屋ごとにその部屋にいける場合の数をカウントする。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 #include &lt;cstdio&gt;
 using namespace std;
  
 int main() {
     int n;
     char cs, ct, cb;
  
     while (cin &gt;&gt; n, n) {
         cin &gt;&gt; cs &gt;&gt; ct &gt;&gt; cb;
         int s = cs - &#039;A&#039;, t = ct - &#039;A&#039;, b = cb - &#039;A&#039;;
  
         int count[9] = {0};
         count[s] = 1;
  
         for (int i = 0; i &lt; n; i++) {
             int plus[9] = {0};
             for (int j = 0; j &lt; 9; j++) {
                 // 上に移動             
                 if (j-3 &gt;= 0 &amp;&amp; j-3 != b) {
                     plus[j-3] += count[j];
                 } else {
                    plus[j] += count[j];
                  }
                 // 下に移動             
                 if (j+3 &lt;= 8 &amp;&amp; j+3 != b) {
                    plus[j+3] += count[j];
        </description>
    <dc:date>2013-01-08T16:11:10+09:00</dc:date>
    <utime>1357629070</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/74.html">
    <title>Switching Railroad Cars</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/74.html</link>
    <description>
      **0013 : Switching Railroad Cars

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0013]]

***解説
スタックをプログラムで表現すればいい。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 #include &lt;vector&gt;
 using namespace std;
  
 int main() {
     vector&lt;int&gt; cars;
     int n;
      
     while (cin &gt;&gt; n) {
         if (n != 0) {
             cars.push_back(n);
         } else {
             cout &lt;&lt; cars.back() &lt;&lt; endl;
             cars.pop_back();
         }
     }   
      
     return 0;
 }
#endregion

***Java    </description>
    <dc:date>2013-01-06T17:03:48+09:00</dc:date>
    <utime>1357459428</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/73.html">
    <title>Drawing Lots</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/73.html</link>
    <description>
      **0011 : Drawing Lots

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0011]]

***解説
あみだくじの結果がどうなるかを答える問題。
棒の番号の数字を入れ替えていけばいい。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 #include &lt;cstdio&gt;
 using namespace std;
  
 int main() {
    int w, n;
  
    cin &gt;&gt; w &gt;&gt; n;
  
    int num[31];
    for (int i = 1; i &lt;= w; i++) num[i] = i;
  
    int a, b;
    for (int i = 0; i &lt; n; i++) {
        scanf(&quot;%d,%d&quot;, &amp;a, &amp;b);
        int c;
        c = num[a];
        num[a] = num[b];
        num[b] = c;
    }
  
    for (int i = 1; i &lt;= w; i++) {
        cout &lt;&lt; num[i] &lt;&lt; endl;
    }
  
    return 0;
 }
#endregion

***Java    </description>
    <dc:date>2013-01-06T17:00:53+09:00</dc:date>
    <utime>1357459253</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/72.html">
    <title>Pair of Primes</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/72.html</link>
    <description>
      **1004 : Pair of Primes

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1004]]

***解説
素数のペアが何個あるかを出力する問題。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 using namespace std;
  
 const int MAX = 10000;
 bool prime[MAX+1] = {false};
 void set_prime() {
     for (int i = 2; i*i &lt;= MAX; i++) {
         if (prime[i]) continue;
  
         for (int j = i*2; j &lt;= MAX; j += i) {
             prime[j] = true;
         }
     }
 }
  
 int main() {
     set_prime();
      
     int n;
     while (cin &gt;&gt; n) {
         int cnt = 0;
         for (int i = 2; i &lt; n; i++) {
             if (!prime[i] &amp;&amp; !prime[n+1-i]) {
                 cnt++;
             }
         }
  
         cout &lt;&lt; cnt &lt;&lt; endl;
     }
  
  
     return 0;
 }
#endregion

***Java    </description>
    <dc:date>2013-01-05T14:58:57+09:00</dc:date>
    <utime>1357365537</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/71.html">
    <title>A + B Problem</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/71.html</link>
    <description>
      **1000 : A + B Problem

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1000]]

***解説
2つの整数の和を出力する問題。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 using namespace std;
  
 int main() {
     int a, b;
     while (cin &gt;&gt; a &gt;&gt; b) {
         cout &lt;&lt; a+b &lt;&lt; endl;
     }
     return 0;
 }
#endregion
***Java    </description>
    <dc:date>2013-01-05T14:48:33+09:00</dc:date>
    <utime>1357364913</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kyoupuro/pages/70.html">
    <title>Leap Year</title>
    <link>https://w.atwiki.jp/kyoupuro/pages/70.html</link>
    <description>
      **0093 : Leap Year

[[問題文&gt;http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0093]]

***解説
うるう年を出力する。
条件をしっかり読む。

***プログラム
***C

***C++
#region
 #include &lt;iostream&gt;
 using namespace std;
  
 int main() {
     int a, b;
     bool first = true;
  
     while (cin &gt;&gt; a &gt;&gt; b) {
         if (a == 0 &amp;&amp; b == 0) break;
  
         if (!first) cout &lt;&lt; endl;
  
         bool insist = false;
         for (int i = a; i &lt;= b; ++i) {
             if (((i % 4 == 0) &amp;&amp; (i % 100 != 0)) || (i % 400 == 0)) {
                 cout &lt;&lt; i &lt;&lt; endl;
                 insist = true;
             }
         }
  
         if (!insist) {
            cout &lt;&lt; &quot;NA&quot; &lt;&lt; endl;
         }
  
         first = false;
     }
  
     return 0;
 }
#endregion
***Java    </description>
    <dc:date>2012-12-23T17:50:43+09:00</dc:date>
    <utime>1356252643</utime>
  </item>
  </rdf:RDF>
