<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ランクB - IQパズルステップ</title>
	<atom:link href="https://chokomon.com/tag/rank_b/feed/" rel="self" type="application/rss+xml" />
	<link>https://chokomon.com</link>
	<description>ちょこっと頭を良くするIQパズル問題集</description>
	<lastBuildDate>Wed, 19 Oct 2022 12:49:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://chokomon.com/wp-content/uploads/2022/02/cropped-icon512-32x32.png</url>
	<title>ランクB - IQパズルステップ</title>
	<link>https://chokomon.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【クラス・構造体メニュー】静的メンバ (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/26-class_primer-02-06-00673/</link>
					<comments>https://chokomon.com/26-class_primer-02-06-00673/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Wed, 19 Oct 2022 12:49:50 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クラス・構造体メニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1800]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=7031</guid>

					<description><![CDATA[【クラス・構造体メニュー】> FINAL問題【静的メンバ】静的メンバ (paizaランク B 相当) [難易度: 1813 ±19] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/26-class_primer/">クラス・構造体メニュー</a>】> <a rel="noreferrer noopener" href="https://paiza.jp/works/mondai/class_primer/class_primer__static_member" target="_blank">FINAL問題【静的メンバ】静的メンバ (paizaランク B 相当)</a> [難易度: <strong>1813 ±19</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/10/26-02-06-01.png" alt="" class="wp-image-7033"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>居酒屋で働きながらクラスの勉強をしていたあなたは、お客さんをクラスに見立てることで勤務時間中の店内の人数や注文の情報を管理できることに気付きました。<br>全てのお客さんは、ソフトドリンクと食事を頼むことができます。加えて 20 歳以上のお客さんはお酒を頼むことができます。<br>20 歳未満のお客さんがお酒を頼もうとした場合はその注文は取り消されます。<br>また、お酒（ビールを含む）を頼んだ場合、以降の全ての食事の注文 が毎回 200 円引きになります。</p>



<p>今回、この居酒屋でビールフェスをやることになり、ビールの注文が相次いだため、いちいちビールの値段である 500 円を書くのをやめ、注文の種類と値段を書く代わりに 0 とだけを書くことになりました。</p>



<p>勤務時間の初めに店内にいるお客さんの人数と与えられる入力の回数、各注文をしたお客さんの番号とその内容、または退店したお客さんの番号が与えられます。<br>お客さんが退店する場合はそのお客さんの会計を出力してください。勤務時間中に退店した全てのお客さんの会計を出力したのち、勤務時間中に退店した客の人数を出力してください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>2 3<br>20<br>30<br>1 0<br>2 0<br>1 A</p>



<p><strong>出力値（例）</strong><br>500<br>1</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    class Customer {
        public $payment = 0;
        private static $counter = 0;
        
        public function __construct($payment) {
            $this-&gt;payment = $payment = 0;
        }
        
        public static function GetNumberOfVisitors() {
            return Customer::$counter;
        }
    
        public function GetPayment() {
            Customer::$counter++;
            return $this-&gt;payment;
        }
    
        public function OrderFood($price) {
            $this-&gt;payment += $price;
        }
    
        public function OrderSoftDrink($price) {
            $this-&gt;payment += $price;
        }
    
        public function OrderAlcohol($price = 500) {
            // echo "お酒は20歳になってから";
        }
    }
    
    class AdultCustomer extends Customer {
        public $discount;
        
        public function __construct($discount) {
            $this-&gt;discount = $discount = false;
        }
    
        public function OrderFood($price) {
            $this-&gt;payment += $this-&gt;discount ? $price - 200 : $price;
        }
    
        public function OrderAlcohol($price = 500) {
            $this-&gt;payment += $price;
            if (!$this-&gt;discount) {
                $this-&gt;discount = true;
            }
        }
    }
    
    list($n, $k) = explode(" ", trim(fgets(STDIN)));
    for($i=0; $i&lt;$n; $i++) {
        $age = trim(fgets(STDIN));
        
        if($age&lt;20) {
            $customers[] = new Customer($age);
        } else {
            $customers[] = new AdultCustomer($age);
        }
    }
    
    for($i=0; $i&lt;$k; $i++) {
        $input = explode(" ", trim(fgets(STDIN)));
        
        $index = $input[0];
        $index--;
        
        $order = $input[1];
        
        if($order == "A") {
            echo $customers[$index]-&gt;GetPayment(). "\n";
        } elseif($order == 0) {
            $order = "beer";
        } else {
            $price = $input[2];
        }
        
        switch($order) {
            case "food":
                $customers[$index]-&gt;OrderFood($price);
                break;
            case "softdrink":
                $customers[$index]-&gt;OrderSoftDrink($price);
                break;
            case "alcohol":
                $customers[$index]-&gt;OrderAlcohol($price);
                break;
            case "beer":
                $customers[$index]-&gt;OrderAlcohol();
                break;
        }
    }
    //print_r($customers);
    
    echo Customer::GetNumberOfVisitors(). "\n";
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/10/26-02-06-02.png" alt="" class="wp-image-7034"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/26-class_primer-02-06-00673/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クラス・構造体メニュー】デフォルト引数 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/26-class_primer-02-05-00672/</link>
					<comments>https://chokomon.com/26-class_primer-02-05-00672/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Tue, 18 Oct 2022 10:45:53 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クラス・構造体メニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1500]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=7026</guid>

					<description><![CDATA[【クラス・構造体メニュー】> 【静的メンバ】STEP: 5 デフォルト引数 (paizaランク B 相当) [難易度: 1590 ±19] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/26-class_primer/">クラス・構造体メニュー</a>】> <a href="https://paiza.jp/works/mondai/class_primer/class_primer__set_default" target="_blank" rel="noreferrer noopener">【静的メンバ】STEP: 5 デフォルト引数 (paizaランク B 相当)</a> [難易度: <strong>1590 ±19</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/10/26-02-05-01.png" alt="" class="wp-image-7027"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>居酒屋で働きながらクラスの勉強をしていたあなたは、お客さんをクラスに見立てることで店内の情報を管理できることに気付きました。<br>全てのお客さんは、ソフトドリンクと食事を頼むことができます。加えて 20 歳以上のお客さんはお酒を頼むことができます。<br>20 歳未満のお客さんがお酒を頼もうとした場合はその注文は取り消されます。<br>また、お酒（ビールを含む）を頼んだ場合、以降の全ての食事の注文 が毎回 200 円引きになります。</p>



<p>今回、この居酒屋でビールフェスをやることになり、ビールの注文が相次いだため、いちいちビールの値段である 500 円を書くのをやめ、伝票に注文の種類と値段を書く代わりに 0 とだけを書くことになりました。</p>



<p>店内の全てのお客さんの数と注文の回数、各注文をしたお客さんの番号とその内容が与えられるので、各お客さんの会計を求めてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3 5<br>19<br>43<br>22<br>2 0<br>2 food 4333<br>1 0<br>2 0<br>1 food 4606</p>



<p><strong>出力値（例）</strong><br>4606<br>5133<br>0</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    class Customer {
        public $payment = 0;
        
        public function __construct($payment) {
            $this-&gt;payment = $payment = 0;
        }
    
        public function GetPayment() {
            return $this-&gt;payment;
        }
    
        public function OrderFood($price) {
            $this-&gt;payment += $price;
        }
    
        public function OrderSoftDrink($price) {
            $this-&gt;payment += $price;
        }
    
        public function OrderAlcohol($price = 500) {
            // echo "お酒は20歳になってから";
        }
    }
    
    class AdultCustomer extends Customer {
        public $discount;
        
        public function __construct($discount) {
            $this-&gt;discount = $discount = false;
        }
    
        public function OrderFood($price) {
            $this-&gt;payment += $this-&gt;discount ? $price - 200 : $price;
        }
    
        public function OrderAlcohol($price = 500) {
            $this-&gt;payment += $price;
            if (!$this-&gt;discount) {
                $this-&gt;discount = true;
            }
        }
    }
    
    list($n, $k) = explode(" ", trim(fgets(STDIN)));
    for($i=0; $i&lt;$n; $i++) {
        $age = trim(fgets(STDIN));
        
        if($age&lt;20) {
            $customers[] = new Customer($age);
        } else {
            $customers[] = new AdultCustomer($age);
        }
    }
    for($i=0; $i&lt;$k; $i++) {
        $m = explode(" ", trim(fgets(STDIN)));
        
        $index = $m[0];
        $index--;
        
        if($m[1] == 0) {
            $order = "beer";
        } else {
            $order = $m[1];
            $price = $m[2];
        }
    
        switch($order) {
            case "food":
                $customers[$index]-&gt;OrderFood($price);
                break;
            case "softdrink":
                $customers[$index]-&gt;OrderSoftDrink($price);
                break;
            case "alcohol":
                $customers[$index]-&gt;OrderAlcohol($price);
                break;
            case "beer":
                $customers[$index]-&gt;OrderAlcohol();
                break;
        }
    }
    //print_r($customers);
    
    for($i=0; $i&lt;$n; $i++) {
        echo $customers[$i]-&gt;GetPayment(). "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/10/26-02-05-02.png" alt="" class="wp-image-7028"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/26-class_primer-02-05-00672/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クラス・構造体メニュー】クラスの継承 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/26-class_primer-02-04-00665/</link>
					<comments>https://chokomon.com/26-class_primer-02-04-00665/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 10 Oct 2022 03:30:30 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クラス・構造体メニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1900]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6983</guid>

					<description><![CDATA[【クラス・構造体メニュー】&#62; 【静的メンバ】STEP: 4 クラスの継承 (paizaランク B 相当)&#160;[難易度:&#160;1934&#160;±23] ※リンク先へ移動するためには[paiza]へのログインが必要です。…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/26-class_primer/">クラス・構造体メニュー</a>】&gt; <a href="https://paiza.jp/works/mondai/class_primer/class_primer__inheritance" target="_blank" rel="noreferrer noopener">【静的メンバ】STEP: 4 クラスの継承 (paizaランク B 相当)</a>&nbsp;[難易度:&nbsp;<strong>1934&nbsp;±23</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/10/26-02-04-01.png" alt="" class="wp-image-6984"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>paiza 国の大衆居酒屋で働きながらクラスの勉強をしていたあなたは、お客さんをクラスに見立てることで店内の情報を管理できることに気付きました。<br>全てのお客さんは、ソフトドリンクと食事を頼むことができます。<br>paiza 国の法律では、 20 歳以上のお客さんは成人とみなされ、お酒を頼むことができます。<br>20 歳未満のお客さんは未成年とみなされ、お酒を頼もうとした場合はその注文は取り消されます。<br>また、お酒を頼んだ場合、以降の全ての食事の注文 が毎回 200 円引きになります.</p>



<p>店内の全てのお客さんの数と注文の回数、各注文をしたお客さんの番号とその内容が与えられるので、各お客さんの会計を求めてください。</p>



<p>ヒント</p>



<p>注文について、20 歳未満のお客さんにできて、 20 歳以上のお客さんにできないことはないので、20歳未満のお客さんのクラスを作成して、それを継承して 20歳以上のお客さんのクラスを作成することで効率よく実装することができます。</p>



<p></p>



<p><strong>入力値（例）</strong><br>2 5<br>59<br>5<br>2 food 1223<br>1 alcohol 4461<br>1 alcohol 4573<br>1 alcohol 1438<br>2 softdrink 1581</p>



<p><strong>出力値（例）</strong><br>10472<br>2804</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    class Customer {
        public $payment = 0;
        
        public function __construct($payment) {
            $this-&gt;payment = $payment = 0;
        }
    
        public function GetPayment() {
            return $this-&gt;payment;
        }
    
        public function OrderFood($price) {
            $this-&gt;payment += $price;
        }
    
        public function OrderSoftDrink($price) {
            $this-&gt;payment += $price;
        }
    
        public function OrderAlcohol($price) {
            // echo "お酒は20歳になってから";
        }
    }
    
    class AdultCustomer extends Customer {
        public $discount;
        
        public function __construct($discount) {
            $this-&gt;discount = $discount = false;
        }
    
        public function OrderFood($price) {
            $this-&gt;payment += $this-&gt;discount ? $price - 200 : $price;
        }
    
        public function OrderAlcohol($price) {
            $this-&gt;payment += $price;
            if (!$this-&gt;discount) {
                $this-&gt;discount = true;
            }
        }
    }

　　list($n, $k) = explode(" ", trim(fgets(STDIN)));
    for($i=0; $i&lt;$n; $i++) {
        $age = trim(fgets(STDIN));
        
        if($age&lt;20) {
            $customers[] = new Customer($age);
        } else {
            $customers[] = new AdultCustomer($age);
        }
    }
    for($i=0; $i&lt;$k; $i++) {
        list($index, $order, $price) = explode(" ", trim(fgets(STDIN)));
        
        $index--;
    
        switch($order) {
            case "food":
                $customers[$index]-&gt;OrderFood($price);
                break;
            case "softdrink":
                $customers[$index]-&gt;OrderSoftDrink($price);
                break;
            case "alcohol":
                $customers[$index]-&gt;OrderAlcohol($price);
                break;
        }
    }
    //print_r($customers);
    
    for($i=0; $i&lt;$n; $i++) {
        echo $customers[$i]-&gt;GetPayment(). "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/10/26-02-04-02.png" alt="" class="wp-image-6985"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/26-class_primer-02-04-00665/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【スキルチェック過去問題セット】みんなでしりとり (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/32-skillcheck_archive-01-06-00661/</link>
					<comments>https://chokomon.com/32-skillcheck_archive-01-06-00661/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Sun, 25 Sep 2022 12:30:43 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[スキルチェック過去問題セット]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-2000以上]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6953</guid>

					<description><![CDATA[【スキルチェック過去問題セット】> みんなでしりとり (paizaランク B 相当) [難易度: 2026 ±17] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/paiza_set/32-skillcheck_archive/">スキルチェック過去問題セット</a>】> <a href="https://paiza.jp/works/mondai/skillcheck_archive/word_chain" target="_blank" rel="noreferrer noopener">みんなでしりとり (paizaランク B 相当)</a> [難易度: <strong>2026 ±17</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/32-01-06-01.png" alt="" class="wp-image-6954"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>あなたは友達たちと N 人でしりとりを行うことにしました。<br>1 人目、 2 人目、...、 N 人目、 1 人目、2 人目、... という順序で発言をします。</p>



<p>ここで、それぞれの人は、次に挙げる 4 つのしりとりのルールを守って発言をする必要があります。</p>



<p>1. 発言は、単語リストにある K 個の単語のうちのいずれかの単語でなければならない。<br>2. 最初の人以外の発言の頭文字は、直前の人の発言の最後の文字と一緒でなければならない。<br>3. 今までに発言された単語を発言してはならない。<br>4. z で終わる単語を発言してはならない。</p>



<p>ここで、発言の途中で上のルールを破った場合、ルールを破った人はしりとりから外れます。<br>そして、その人を抜いて引き続きしりとりを続けていきます。このとき、後続の人は、ルール 2 を守る必要はありません。</p>



<p>N 人がしりとりを行ったログが M 行分与えられます。<br>このとき、M 回の発言が終わった後、しりとりから脱落せずに残っている人のリストを表示するプログラムを書いてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3 6 7<br>a<br>aloha<br>app<br>az<br>paiza<br>warp<br>app<br>paiza<br>a<br>aloha<br>az<br>warp<br>paiza</p>



<p><strong>出力値（例）</strong><br>1<br>3</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    //ルールの関数を作る
    //ルール1. 発言は、単語リストにある K 個の単語のうちの
    //いずれかの単語でなければならない。
    function rule1($word_list, $v) {
        return in_array($v, $word_list);
    }
    //ルール2. 最初の人以外の発言の頭文字は、
    //直前の人の発言の最後の文字と一緒でなければならない。
    function rule2($v, $before_word, $pass_rule2) {
        return $pass_rule2 or $before_word[-1] == $v[0];
    }
    //ルール3. 今までに発言された単語を発言してはならない。
    function rule3($current_log, $v) {
        return (!in_array($v, $current_log));
    }
    //ルール4. z で終わる単語を発言してはならない。
    function rule4($v) {
        return $v[-1] != "z";
    }
    
    function next_number($alive, $now_number) {
        while(true) {
            if($now_number &gt;= count($alive)) {
                $now_number = 0;
            }
            if($alive[$now_number]) {
                return $now_number;
            }
            $now_number += 1;
        }
    }
    
    list($n, $k, $m) = explode(" ", trim(fgets(STDIN)));
    for($i=0; $i&lt;$k; $i++) {
        $word_list[] = trim(fgets(STDIN));
    }
    
    for($i=0; $i&lt;$m; $i++) {
        $log[] = trim(fgets(STDIN));
        
    }
    
    //生存者をtrueとした配列を作る、脱落したらfalseにする
    $alive = array_fill(0, $n, true);
    //print_r($alive);
    
    $now_number = 0;
    $current_log = [];
    $before_word = " ";
    
    //最初の人はルール2をパスしてよい
    $pass_rule2 = true;
    
    for($i=0; $i&lt;$m; $i++) {
        $v = $log[$i];
        if(rule1($word_list, $v) and rule2($v, $before_word, $pass_rule2) 
            and rule3($current_log, $v) and rule4($v)) {
            $pass_rule2 = false;
        }
        else {
            $alive[$now_number] = false;
            $pass_rule2 = true;
        }
        
        //発言したワードを保存しておく配列を作る
        $current_log[] = $v;
        $now_number = next_number($alive, $now_number+1);
        $before_word = $v;
    }
    //print_r($alive);
    
    echo array_sum($alive). "\n";
    
    for($i=0; $i&lt;count($alive); $i++) {
        if($alive[$i]) {
            echo ($i+1). "\n";
        }
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/32-01-06-02.png" alt="" class="wp-image-6955"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/32-skillcheck_archive-01-06-00661/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【スキルチェック過去問題セット】神経衰弱 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/32-skillcheck_archive-01-07-00660/</link>
					<comments>https://chokomon.com/32-skillcheck_archive-01-07-00660/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Sat, 24 Sep 2022 12:57:15 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[スキルチェック過去問題セット]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1500]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6948</guid>

					<description><![CDATA[【スキルチェック過去問題セット】> 神経衰弱 (paizaランク B 相当) [難易度: 1588 ±12] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/paiza_set/32-skillcheck_archive/">スキルチェック過去問題セット</a>】> <a href="https://paiza.jp/works/mondai/skillcheck_archive/concentration" target="_blank" rel="noreferrer noopener">神経衰弱 (paizaランク B 相当)</a> [難易度: <strong>1588 ±12</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/32-01-07-01.png" alt="" class="wp-image-6949"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>神経衰弱と呼ばれるトランプゲームのシミュレーションをしましょう。<br>今回は数字が書かれたトランプのみを考え、ジョーカーは考えません。</p>



<p>まず、トランプを縦 H 枚、横 W 枚の長方形の形に並べた状態でスタートします。<br>H × W 枚のトランプには 1 〜 13 の数字のうちどれか1つが書かれています。<br>また、同じ数字が書かれたトランプが複数あります。</p>



<p>プレイヤーが N 人おり、それぞれ 1 〜 N で番号付けられています。<br>ゲームが始まると、1番の人から、このような手順でプレイしていきます。</p>



<p>・並べられたトランプから2枚のトランプを選び、めくります。<br>・めくった2枚のトランプに異なる数字が書かれていれば、次のプレイヤーの手番となります。同じ数字であれば、次の操作をおこないます。<br>・まず、2枚のトランプはめくったプレーヤーのものとなり、取り除かれます。<br>・トランプがすべて取り除かれた場合、ゲームは終了となります。<br>・トランプが残っている場合、同じプレーヤーがまた最初の手順に戻り、トランプをめくります。</p>



<p>ここで、N 番のプレイヤーの次のプレイヤーは 1 番のプレイヤーであるとします。</p>



<p>ゲームの初期状態におけるトランプの配置と、ゲームが終わるまでに捲られたトランプに関する時系列順の記録が与えられます。<br>その記録を用いて、各プレイヤーが取り除いたトランプの枚数を求めてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>2 3 2<br>1 2 3<br>2 1 3<br>5<br>1 1 2 1<br>1 1 1 2<br>1 1 2 2<br>1 3 2 3<br>1 2 2 1</p>



<p><strong>出力値（例）</strong><br>6<br>0</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($h, $w, $n) = explode(" ", trim(fgets(STDIN)));
    for($i=0; $i&lt;$h; $i++) {
        $t[] = explode(" ", trim(fgets(STDIN)));
    }
    
    $l = trim(fgets(STDIN));
    
    $player_card = array_fill(0, $n, 0);
    $player = 0;
    
    for($i=0; $i&lt;$l; $i++) {
        list($a, $b, $A, $B) = explode(" ", trim(fgets(STDIN)));
        
        $a -= 1; $b -= 1; $A -= 1; $B -= 1;
        
        // 同じカードを引いたかどうか
        if($t[$a][$b] == $t[$A][$B]) {
            $player_card[$player] += 2;
        }
        // 同じカードを引かなかった場合は、次のプレイヤーの番になる
        else {
            $player ++;
            $player %= $n;
        }
    }
    for($i=0; $i&lt;$n; $i++) {
        echo $player_card[$i]. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/32-01-07-02.png" alt="" class="wp-image-6950"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/32-skillcheck_archive-01-07-00660/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【戦セット】【挑戦9】線対称と点対称 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/33-warset-01-09-00655/</link>
					<comments>https://chokomon.com/33-warset-01-09-00655/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 19 Sep 2022 01:45:58 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[戦セット]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1900]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6917</guid>

					<description><![CDATA[【戦セット】> 【挑戦9】線対称と点対称 (paizaランク B 相当) [難易度: 1969 ±18] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/paiza_set/33-warset/">戦セット</a>】> <a href="https://paiza.jp/works/mondai/warset/b1_symmetry" target="_blank" rel="noreferrer noopener">【挑戦9】線対称と点対称 (paizaランク B 相当)</a> [難易度: <strong>1969 ±18</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/33-01-09-01.png" alt="" class="wp-image-6918"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>この問題は、弊社営業社員が競技プログラミングに挑戦したものです。<br>https://youtu.be/Vf2RFjXCmZY</p>



<p>ある図形に対し、線対称、点対称は次のように定義されます。<br>・線対称：ある直線を折り目にして折りたたんだとき、折り目の両側がぴったり重なること<br>・点対称：ある一点で180度回転させたとき、もとの図形とまったく同じ形になること</p>



<p>この問題では、ドット絵に対する線対称、点対称を以下のように定義します。<br>・線対称：ドット絵の中心を通る垂直、または水平な直線で折りたたんだとき、折り目の両端がぴったり重なること<br>（斜めの直線を折り目にすることは考えません。）<br>・点対称：ドット絵の中心で180度回転させたとき、もとの図形とまったく同じ形になること</p>



<p>n×mのドット絵が入力されるので、そのドット絵が線対称であるか、点対称であるか、その両方か、そのどちらかでもないかを判定するプログラムを作成してください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>2 3<br>###<br>...</p>



<p><strong>出力値（例）</strong><br>line symmetry</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($n, $m) = explode(" ", trim(fgets(STDIN)));
    
    for($i=0; $i&lt;$n; $i++){
        $d[$i] = trim(fgets(STDIN));
    }
    
    $line_vertical = true; $line_horizontal = true; $point_s = true;
    
    // 点対称
    for($i=0; $i&lt;=$n/2; $i++){
        for($j=0; $j&lt;=$m/2; $j++){
            if($d[$i][$j] != $d[$n-1-$i][$m-1-$j]){
                $point_s = false;
            }
        }
    }
    
    // 垂直に折りたたむ際
    for($i=0; $i&lt;$n; $i++){
        for($j=0; $j&lt;=$m/2; $j++){
            if($d[$i][$j] != $d[$i][$m-1-$j]){
                $line_vertical = false;
            }
        }
    }
    
    // 水平に折りたたむ際
    for($i=0; $i&lt;=$n/2; $i++){
        for($j=0; $j&lt;$m; $j++){
            if($d[$i][$j] != $d[$n-1-$i][$j]){
                $line_horizontal = false;
            }
        }
    }
    
    if($point_s){
        if($line_horizontal || $line_vertical){
            echo "line point symmetry";
        }else{
            echo "point symmetry";
        }
    }else{
        if($line_horizontal || $line_vertical){
            echo "line symmetry";
        }else{
            echo "none";
        }
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="160" src="https://chokomon.com/wp-content/uploads/2022/09/33-01-09-02.png" alt="" class="wp-image-6919"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/33-warset-01-09-00655/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】&#039;I&#039; の数 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-04-01-00615/</link>
					<comments>https://chokomon.com/17-query_primer-04-01-00615/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Wed, 07 Sep 2022 08:19:49 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1900]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6676</guid>

					<description><![CDATA[【クエリメニュー】> 【点の幅】STEP: 1 'I' の数 (paizaランク B 相当) [難易度: 1954 ±33] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__word_count" target="_blank" rel="noreferrer noopener">【点の幅】STEP: 1 'I' の数 (paizaランク B 相当)</a> [難易度: <strong>1954 ±33</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-04-01-01.png" alt="" class="wp-image-6677"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>英語の授業中に暇だった paiza 君は、N ページの教科書を使った次のようなゲームを思いつきました。</p>



<p>「2人のプレイヤーがそれぞれ教科書の 1 箇所を適当に掴んで、掴んだ範囲のページに含まれる 'I' の合計数が多い方が勝ち、少ない方が負け、同じだったら引き分け！」<br>「ただし、 N/3 ページ以上掴んだ人は反則負けで、 2 人とも反則したら引き分け！」<br>(ここでの N/3 は整数であるとは限りません)</p>



<p>審判を任されたあなたは、各ページに含まれる 'I' の数を記録しておくことで、掴んだページの両端の番号を確認するだけで、掴んだ範囲のページに含まれる 'I' の合計数を求めることができることに気付きました。</p>



<p>教科書のページ数 N と試合の数 K , 各ページの 'I' の数 I_1 ... I_N と、<br>i 番目の試合で対戦した A と B の 2 人が掴んだページの両端のページ番号 A_l_i, A_r_i , B_l_i, B_r_iが与えられるので、各試合のジャッジしてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3 3<br>0<br>1<br>2<br>1 1 2 2<br>2 2 3 3<br>3 3 3 3</p>



<p><strong>出力値（例）</strong><br>DRAW<br>DRAW<br>DRAW</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($n, $k) = explode(" ", trim(fgets(STDIN)));
    
    $page_min = ($n/3.0);
    $sum[0] = 0;

    for ($i=0; $i&lt;$n; $i++) {
        $a = trim(fgets(STDIN));
        $sum[$i+1] = $sum[$i] + $a;
    }
    
    for ($i=0; $i&lt;$k; $i++) {
        list($al, $ar, $bl, $br) = explode(" ", trim(fgets(STDIN)));
    
        $pagea = $ar-$al+1;
        $pageb = $br-$bl+1;
    
        if ($page_min &lt;= $pagea) {
          if ($page_min &lt;= $pageb) {
            $result = "DRAW";
          } else {
            $result = "B";
          }
        } else {
          if ($page_min &lt;= $pageb) {
            $result = "A";
          } else {
            if ($sum[$ar]-$sum[$al-1] &gt; $sum[$br]-$sum[$bl-1]) {
              $result = "A";
            } elseif ($sum[$ar]-$sum[$al-1] &lt; $sum[$br]-$sum[$bl-1]) {
              $result = "B";
            } else {
              $result = "DRAW";
            }
          }
        }
        echo $result. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/17-04-01-02.png" alt="" class="wp-image-6678"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-04-01-00615/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【スキルチェック過去問題セット】日別訪問者数の最大平均区間 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/32-skillcheck_archive-01-05-00610/</link>
					<comments>https://chokomon.com/32-skillcheck_archive-01-05-00610/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Tue, 06 Sep 2022 01:02:19 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[スキルチェック過去問題セット]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1600]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6636</guid>

					<description><![CDATA[【スキルチェック過去問題セット】&#62; 日別訪問者数の最大平均区間 (paizaランク B 相当)&#160;[難易度:&#160;1628&#160;±9] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/paiza_set/32-skillcheck_archive/">スキルチェック過去問題セット</a>】&gt; <a href="https://paiza.jp/works/mondai/skillcheck_archive/max_range" target="_blank" rel="noreferrer noopener">日別訪問者数の最大平均区間 (paizaランク B 相当)</a>&nbsp;[難易度:&nbsp;<strong>1628&nbsp;±9</strong>]



<p>※リンク先へ移動するためには[<a rel="noreferrer noopener" href="https://paiza.jp/works" target="_blank">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/32-01-05-01.png" alt="" class="wp-image-6637"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>あなたは、とあるウェブサイトを管理していました。<br>ある連続したk日間、このウェブサイトでキャンペーンを行ったのですが、いつからいつまでの期間に行ったかを忘れてしまいました。</p>



<p>幸い、ウェブサイトを運営していた全n日分のアクセスログが残っており、1日ごとの訪問者数が分かっています。<br>とりあえず、連続するk日の中で、1日あたりの平均訪問者数が最も多い期間を、キャンペーンを行った期間の候補だと考えることにしました。</p>



<p>n日分の訪問者数のリストとキャンペーンの日数kが入力されるので、キャンペーンを行った期間の候補数と、候補の中で最も早い開始日を出力してください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>5 3<br>1 2 3 2 1</p>



<p><strong>出力値（例）</strong><br>1 2</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($n, $k) = explode(" ", trim(fgets(STDIN)));
    $a = explode(" ", trim(fgets(STDIN)));
    
    $total = [$n-$k+1];
    for ($i=0; $i&lt;$n-$k+1; $i++) {
        $total[$i] = 0;
        
        for ($j=$i; $j&lt;$i+$k; $j++) {
            $total[$i] += $a[$j];
        }
    }
    
    $max = 0;
    for ($i=0; $i&lt;$n-$k+1; $i++) {
        if ($max&lt;=$total[$i]) $max = $total[$i];
    }
    
    $count = 0;
    for ($i=0; $i&lt;$n-$k+1; $i++) {
        if ($total[$i] == $max) $count++;
    }
    
    $first_day = 0;
    for ($i=0; $i&lt;$n-$k+1; $i++) {
        if ($total[$i] == $max) {
            $first_day = $i+1;
            break;
        }
    }
    
    printf("%d %d\n", $count, $first_day);
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="160" src="https://chokomon.com/wp-content/uploads/2022/09/32-01-05-02.png" alt="" class="wp-image-6638"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/32-skillcheck_archive-01-05-00610/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】平方分割 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-03-06-00607/</link>
					<comments>https://chokomon.com/17-query_primer-03-06-00607/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Thu, 01 Sep 2022 19:09:20 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-2000以上]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6618</guid>

					<description><![CDATA[【クエリメニュー】> FINAL問題 平方分割 (paizaランク B 相当) [難易度: 2188 ±43] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a rel="noreferrer noopener" href="https://paiza.jp/works/mondai/query_primer/query_primer__square_division" target="_blank">FINAL問題 平方分割 (paizaランク B 相当)</a> [難易度: <strong>2188 ±43</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-06-01.png" alt="" class="wp-image-6619"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>paiza くんは、長さ N の整数列 A の区間 A[l_i] ... A[r_i] の最大の要素の値を K 回求めたいのですが、与えられる区間の要素をいちいち全て調べていては時間計算量にして最大で O(NK) かかってしまいます。<br>そこで、paiza くんは 平方分割 と言われるアルゴリズムを用いることで、この計算量を減らそうと考えました。<br>平方分割とは、次のようなアルゴリズムです。</p>



<p>1. 長さ N の配列が与えられたとき、N の平方根を x を求め、配列を長さ x の配列に分割し、それぞれの配列について目的の値を調べておく。<br>（分割で得られる最後の配列の長さは必ずしも x になるとは限りません）<br>2. 調べたい区間に完全に含まれている配列についての 1. で求めた値と、その配列以外の部分の値を全て調べて、目的の値を求める。</p>



<p>この問題では、長さ 10,000 の数列 A について手順 2. までやってみましょう。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3<br>74769<br>-62958<br>6542<br>-93191<br>-6767<br>-5945<br>65384<br>-97133<br>85447<br>-80479<br>...<br>7984 9087<br>8855 9824<br>8228 8478</p>



<p><strong>出力値（例）</strong><br>99983<br>99983<br>99948</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    for ($i=1; $i&lt;10000; $i++) {
        if ($i*$i&gt;=10000) {
          $root = $i;
          break;
        }
    }
    
    $k = trim(fgets(STDIN));
    
    for ($i=0; $i&lt;10000; $i++) {
        $a[$i] = trim(fgets(STDIN));
    }
    
    for ($i=0; $i&lt;$root; $i++) {
        for ($j=0; $j&lt;$root; $j++) {
            if ($j==0) {
                $range_max[$i] = $a[$i*$root];
            } else {
                $range_max[$i] = max($range_max[$i], $a[$i*$root+$j]);
            }
        }
    }
    
    for ($i=0; $i&lt;$k; $i++) {
        $ans = 0;
        list($l, $r) = explode(" ", trim(fgets(STDIN)));
        $l--;
        $r--;
        $ans = $a[$l];
        $now = $l;
    
        while ($now&lt;=$r) {
          if ($now%$root==0 &amp;&amp; $now+$root-1 &lt;= $r) {
            $ans = max($ans, $range_max[$now / $root]);
            $now += $root;
          } else {
            $ans = max($ans, $a[$now]);
            $now++;
          }
        }
        echo $ans. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-06-02.png" alt="" class="wp-image-6620"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-03-06-00607/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】二次元区間和 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-03-04-00605/</link>
					<comments>https://chokomon.com/17-query_primer-03-04-00605/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Wed, 31 Aug 2022 18:29:42 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-1700]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6607</guid>

					<description><![CDATA[【クエリメニュー】> 【平方分割】STEP: 4 二次元区間和 (paizaランク B 相当) [難易度: 1725 ±29] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】> <a href="https://paiza.jp/works/mondai/query_primer/query_primer__two_dimensions_interval_sum" target="_blank" rel="noreferrer noopener">【平方分割】STEP: 4 二次元区間和 (paizaランク B 相当)</a> [難易度: <strong>1725 ±29</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-04-01.png" alt="" class="wp-image-6608"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>H 行 W 列 の行列 A の 2 つの行・列番号の組 {a , b} , {c , d} における区間和 S({a,b} , {c,d}) (a ≦ c , b ≦ d) を以下の数式・図の通り定義します。以後 A の y 行 x 列の要素を A[y][x] と表すことにします。</p>



<p>S({a,b} , {c,d}) = A[a][b] + A[a][b+1] + ... + A[a][d] + A[a+1][1] + ... + A[a+1][d] + ... + A[c][1] + ... + A[c][d]



<p>例として、入力例 1 の A における S({2,2},{3,3}) は以下の通りになり、値は 28 となります。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://chokomon.com/wp-content/uploads/2022/09/1.jpeg" alt="" class="wp-image-6609" width="512" height="384" srcset="https://chokomon.com/wp-content/uploads/2022/09/1.jpeg 1024w, https://chokomon.com/wp-content/uploads/2022/09/1-768x576.jpeg 768w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure>



<p>H 行 W 列 の行列 A と、区間和を求めたいペアについての情報が与えられるので、各ペアについて累積和を求めてください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>3 3 2<br>1 2 3<br>4 5 6<br>7 8 9<br>1 1 3 3<br>1 2 2 3</p>



<p><strong>出力値（例）</strong><br>45<br>16</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($h, $w, $n) = explode(" ", trim(fgets(STDIN)));
    
    $sum = [[]];
    
    for ($i = 0; $i &lt; $h; $i++) {
        $a[$i] = explode(" ", trim(fgets(STDIN)));
        
        for ($j = 0; $j &lt; $w; $j++) {
            $sum[$i][$j] = $a[$i][$j];
            
            if (0 &lt; $i) $sum[$i][$j] += $sum[$i-1][$j];
            if (0 &lt; $j) $sum[$i][$j] += $sum[$i][$j-1];
            if (0 &lt; $i &amp;&amp; 0 &lt; $j) $sum[$i][$j] -= $sum[$i-1][$j-1];
        }
    }
    //print_r($sum);
    
    for ($i = 0; $i &lt; $n; $i++) {
        list($a, $b, $c, $d) = explode(" ", trim(fgets(STDIN)));
        
        $a--; $b--; $c--; $d--;
        
        if ($a&gt;0 &amp;&amp; $b&gt;0) {
            $ans = $sum[$c][$d]+$sum[$a-1][$b-1]-$sum[$a-1][$d]-$sum[$c][$b-1];
        } else if ($a==0 &amp;&amp; $b&gt;0) {
            $ans = $sum[$c][$d]-$sum[$c][$b-1];
        } else if ($a&gt;0 &amp;&amp; $b==0) {
            $ans = $sum[$c][$d]-$sum[$a-1][$d];
        } else if($a==0 &amp;&amp; $b==0) {
            $ans = $sum[$c][$d];
        }
        
        printf("%d\n",$ans);
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="200" src="https://chokomon.com/wp-content/uploads/2022/09/17-03-04-02.png" alt="" class="wp-image-6610"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-03-04-00605/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
