<?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>難易度-2000以上 - IQパズルステップ</title>
	<atom:link href="https://chokomon.com/tag/difficulty-2000/feed/" rel="self" type="application/rss+xml" />
	<link>https://chokomon.com</link>
	<description>ちょこっと頭を良くするIQパズル問題集</description>
	<lastBuildDate>Sun, 25 Sep 2022 12:30:44 +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>難易度-2000以上 - IQパズルステップ</title>
	<link>https://chokomon.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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 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/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 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>【クエリメニュー】Vtuber (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-02-05-00601/</link>
					<comments>https://chokomon.com/17-query_primer-02-05-00601/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Sun, 28 Aug 2022 22:28:55 +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=6584</guid>

					<description><![CDATA[【クエリメニュー】> FINAL問題 Vtuber (paizaランク B 相当) [難易度: 2139 ±36] ※リンク先へ移動するためには[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__vtuber" target="_blank" rel="noreferrer noopener">FINAL問題 Vtuber (paizaランク B 相当)</a> [難易度: <strong>2139 ±36</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/08/17-02-05-01.png" alt="" class="wp-image-6585"/></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>あなたは流行に乗っかり、Vtuber としての活動をスタートしました。活動も軌道にのり、配信をするたびに視聴者が superchat を送ってくれたり、メンバーシップ制度に加入してくれるようになりました。<br>（わからない方は 「youtube superchat」「youtube membership」 などで検索してみてください。）<br>あなたはお礼として superchat を読むお礼配信をおこなうことにしました。<br>その配信で、前回の配信の superchat の総額が高いアカウントから順に、superchat をした全てのアカウントの名前を読んだ後、メンバーシップに入ってくれた全てのアカウントの名前を辞書順昇順で読むことにしました。<br>superchat の金額が同じ場合、同じ金額の中で辞書順降順でアカウント名を読むことにしました。<br>前回の配信の superchat とメンバーシップ加入の履歴が与えられるので、読む順番にアカウント名を出力するプログラムを作成してください。</p>



<p></p>



<p>・1 行目では、superchat とメンバーシップ加入の回数の和 N が与えられます。<br>・続く N 行のうち、 i 行目では、i 番目のイベントの内容 E_i が以下のいずれかの形式で与えれられます。</p>



<p><code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">name give money !</mark></code><br>name さんが money 円の superchat を送ったことを表す。</p>



<p><code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">name join membership!</mark></code><br>name さんがメンバーシップに加入したことを表す。</p>



<p></p>



<p><strong>入力値（例）</strong><br>5<br>aiueo give 2489 !<br>kk join membership!<br>coffee_addiction join membership!<br>so_cute give 837 !<br>yoyo give 9284 !</p>



<p></p>



<p><strong>出力値（例）</strong><br>yoyo<br>aiueo<br>so_cute<br>coffee_addiction<br>kk</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
    $n = trim(fgets(STDIN));
    
    $member = [];
    $chat = [];
    
    for ($i = 0; $i &lt; $n; $i++) {
        $event = explode(" ", trim(fgets(STDIN)));
        
        $name = $event[0];
        $verb = $event[1];
        
        if ($verb == "join") {
            array_push($member, $event[0]);
            
        } else {
            $money = $event[2];
            
            if (isset($chat[$name])) {
                $chat[$name] = array($chat[$name][0]+$money, $name);
                
            } else {
                $chat[$name] = array($money, $name);
            }
        }
    }
    
    //print_r($chat);
    
    rsort($chat);
    sort($member);
    
    foreach ($chat as $key =&gt; $value) {
        echo $value[1]. "\n";
    }
    
    foreach ($member as $value) {
        echo $value. "\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="240" src="https://chokomon.com/wp-content/uploads/2022/08/17-02-05-02.png" alt="" class="wp-image-6586"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-02-05-00601/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【DPメニュー】部分和問題 3 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/18-dp_primer-06-03-00573/</link>
					<comments>https://chokomon.com/18-dp_primer-06-03-00573/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Tue, 16 Aug 2022 17:58:18 +0000</pubDate>
				<category><![CDATA[DPメニュー]]></category>
		<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-2000以上]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6373</guid>

					<description><![CDATA[【DPメニュー】> 【部分和】STEP: 3 部分和問題 3 (paizaランク B 相当) [難易度: 2080 ±12] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例 解説 1) 整数n、整数xを受け取りま…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/18-dp_primer/">DPメニュー</a>】> <a href="https://paiza.jp/works/mondai/dp_primer/dp_primer_partial_sums_step2" target="_blank" rel="noreferrer noopener">【部分和】STEP: 3 部分和問題 3 (paizaランク B 相当)</a> [難易度: <strong>2080 ±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/08/18-06-03-01.png" alt="" class="wp-image-6374"/></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>1 ~ n の番号がついた n 個のおもりがあり、おもり i の重さは a_i です。</p>



<p>おもりを何個か選んで重さの和が x となるようにする方法を考えたとき、選ぶおもりの個数の最小値を出力してください。なお、同じおもりを2個以上選ぶことはできません。</p>



<p>なお、重さの和が x となるようにおもりを選ぶ方法が存在しない場合は-1と出力してください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>5 10<br>7<br>3<br>4<br>3<br>2</p>



<p><strong>出力値（例）</strong><br>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, $x) = explode(" ", trim(fgets(STDIN)));
    
    for ($i = 0; $i &lt; $n; $i++) {
        $a[$i] = trim(fgets(STDIN));
    }

    $dp[0] = 0;
    
    for ($i = 1; $i &lt;= $x; $i++) {
        $dp[$i] = $n+1;
    }
    
    for($i = 0; $i &lt; $n; $i++){
        for($j = $x; $j &gt;= $a[$i]; $j--){
            if($dp[$j-$a[$i]] == $n+1)   continue;
            $dp[$j] = min($dp[$j], $dp[$j-$a[$i]]+1);
        }
    }
    //print_r($dp);

    echo ($dp[$x] == $n+1) ? -1 : $dp[$x];
?&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/08/18-06-03-02.png" alt="" class="wp-image-6375"/></figure>



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



<p>1) 整数n、整数xを受け取ります。<br>2) 配列aを受け取ります。<br>3) 配列dp[i]にn+1を代入します。<br>4) i = 1～nで繰り返し設定をします。<br>5) 二重ループでj = x～a[i-1]で繰り返し処理を設定します。<br>6) dp[j]とdp[j-a[i-1]+1でおもりの少ない方で更新します。<br>7) dp[x]を返します。n+1個の場合は-1を返す。<br>コードの中で、n+1としているのは、おもりの個数はnなので、おもりをn+1個選ぶような状況は起こりえないためです。<br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/18-dp_primer-06-03-00573/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【DPメニュー】部分和問題 2 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/18-dp_primer-06-02-00572/</link>
					<comments>https://chokomon.com/18-dp_primer-06-02-00572/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 15 Aug 2022 19:06:01 +0000</pubDate>
				<category><![CDATA[DPメニュー]]></category>
		<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクB]]></category>
		<category><![CDATA[難易度-2000以上]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6368</guid>

					<description><![CDATA[【DPメニュー】> 【部分和】STEP: 2 部分和問題 2 (paizaランク B 相当) [難易度: 2056 ±33] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/18-dp_primer/">DPメニュー</a>】> <a href="https://paiza.jp/works/mondai/dp_primer/dp_primer_partial_sums_step1" target="_blank" rel="noreferrer noopener">【部分和】STEP: 2 部分和問題 2 (paizaランク B 相当)</a> [難易度: <strong>2056 ±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/08/18-06-02-01.png" alt="" class="wp-image-6369"/></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>1 ~ n の番号がついた n 個のおもりがあり、おもり i の重さは a_i です。</p>



<p>おもりを何個か選んで重さの和が x となるようにする方法が何通りあるか求めてください。なお、同じおもりを2個以上選ぶことはできません。</p>



<p>重さが同じおもりが複数存在する場合、それらは区別して別のものとして扱うことにします。</p>



<p>答えは非常に大きくなる可能性があるので、答えを 1,000,000,007 で割った余りで出力してください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>5 10<br>7<br>3<br>4<br>3<br>2</p>



<p><strong>出力値（例）</strong><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
    list($n, $x) = explode(" ", trim(fgets(STDIN)));
    
    for ($i = 0; $i &lt; $n; $i++) {
        $a[] = trim(fgets(STDIN));
    }
    
    for ($i = 0; $i &lt;= $x; $i++) {
        $dp[$i] = 0;
    }
    
    $dp[0] = 1;
    
    for ($i = 0; $i &lt; $n; $i++) {
        for ($j = $x; $j &gt; $a[$i]-1; $j--) {
            if ($dp[$j - $a[$i]] &gt; 0) {
                $dp[$j] = ($dp[$j] + $dp[$j - $a[$i]]) % 1000000007;
            }
        }
    }

    echo $dp[$x];
?&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/08/18-06-02-02.png" alt="" class="wp-image-6370"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/18-dp_primer-06-02-00572/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クエリメニュー】指定要素の検索 (query) (paizaランク D)-解答例-PHP編</title>
		<link>https://chokomon.com/17-query_primer-01-03-00530/</link>
					<comments>https://chokomon.com/17-query_primer-01-03-00530/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Sat, 06 Aug 2022 08:15:07 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[クエリメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクD]]></category>
		<category><![CDATA[難易度-2000以上]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=6075</guid>

					<description><![CDATA[【クエリメニュー】&#62; 【ソートと検索 (query)】STEP: 3 指定要素の検索 (query) (paizaランク D 相当)&#160;[難易度:&#160;2117&#160;±31] ※リンク先へ移動するためには[paiz…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/17-query_primer/">クエリメニュー</a>】&gt; <a href="https://paiza.jp/works/mondai/query_primer/query_primer__multi_search" target="_blank" rel="noreferrer noopener">【ソートと検索 (query)】STEP: 3 指定要素の検索 (query) (paizaランク D 相当)</a>&nbsp;[難易度:&nbsp;<strong>2117&nbsp;±31</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/08/17-01-03-01.png" alt="" class="wp-image-6076"/></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 の重複した要素の無い数列 A と Q 個の整数 K_1 ... K_Q が与えられるので、<br>各 K_i について、 A に K_i が含まれていれば "YES" を、そうでなければ "NO" を出力してください。</p>



<p></p>



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



<p><strong>出力値（例）</strong><br>YES<br>YES<br>YES<br>NO<br>NO</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, $q) = explode(" ", trim(fgets(STDIN)));
    
    for ($i = 0; $i &lt; $n; $i++) {
        $value = trim(fgets(STDIN));
        $a[$value] = $value;
    }
    //print_r($a);
    
    for ($i = 0; $i &lt; $q; $i++) {
        $k = trim(fgets(STDIN));
        
        echo (isset($a[$k])) ? "YES" : "NO";
        echo "\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="240" src="https://chokomon.com/wp-content/uploads/2022/08/17-01-03-02.png" alt="" class="wp-image-6077"/></figure>



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



<h3 class="wp-block-heading">失敗コード</h3>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    list($n, $q) = explode(" ", trim(fgets(STDIN)));
    
    for ($i = 0; $i &lt; $n; $i++) {
        $a[] = trim(fgets(STDIN));
    }
    
    for ($i = 0; $i &lt; $q; $i++) {
        $k = trim(fgets(STDIN));
        
        echo (in_array($k, $a)) ? "YES" : "NO";
        echo "\n";
    }
?&gt;</pre></div>



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



<p>in_array()を用いて配列内に対象の値があるかどうか判別していますが、データ量がかなり多く指定時間に処理できませんでした。</p>



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



<p>このように、配列を用いてデータを受け取り、繰返しin_array()で判定するとプログラム全体でN*Q回ループを回す必要があります。この問題の条件を見ると、NとQは最大10万ものデータがあるため、最大100億となってしまいます。</p>



<p>テスト4に関しては、16秒もかかっているためタイムオーバーとなってしまいました。</p>



<p>他の方がpythonで解答している内容などでは、in_array()に対応するinという演算子を使ってうまく処理できていました。</p>



<p>データ量が多いときの値検査では、in_array()よりもisset()が有力なようです。テスト4が通らなくて泣きそうになりましたがなんとか通過できて良かったです。(*'ω'*)</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/17-query_primer-01-03-00530/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【その他セット】総和の計算 (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/41-etc-01-01-00497/</link>
					<comments>https://chokomon.com/41-etc-01-01-00497/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 18 Jul 2022 01:48:32 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[その他セット]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-2000以上]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=5853</guid>

					<description><![CDATA[【その他セット】&#62; 総和の計算 (paizaランク C 相当)&#160;[難易度:&#160;2095&#160;±22] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例 解説 問題文の入力例がよく分から…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/paiza_set/41-etc/">その他セット</a>】&gt; <a href="https://paiza.jp/works/mondai/etc/a_rank_calculation_step1" target="_blank" rel="noreferrer noopener">総和の計算 (paizaランク C 相当)</a>&nbsp;[難易度:&nbsp;<strong>2095&nbsp;±22</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/07/41-01-01-01.png" alt="" class="wp-image-5854"/></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>２つの整数 A , B が与えられるので、 A, A + 1, .... B - 1, B の総和を求めてください。</p>



<p></p>



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



<p><strong>出力値（例）</strong><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($a, $b) = explode(" ", trim(fgets(STDIN)));
    if (($a+$b) % 2 == 0) {
        (int) $p = ($a + $b) / 2;
        (int) $q = ($b - $a + 1);
    }
    else {
        (int) $p = ($a + $b);
        (int) $q = ($b - $a + 1) / 2;
    }
    
    if (is_int($p*$q)) {
        echo $p*$q;
    }
    else {
        (int) $pp = $p % 10**6;
        (int) $pc = ($p-$pp) / 10**6;
        (int) $qq = $q % 10**6;
        (int) $qc = ($q-$qq) / 10**6;
        (int) $a1 = $pp*$qc+$pc*$qq;
        (int) $a1x = $a1 % 10**6;
        (int) $a1c = ($a1-$a1x) / 10**6;
        (int) $a0 = $pp*$qq + $a1x*10**6;
        (int) $a0x = $a0 % 10**12;
        (int) $a0c = ($a0-$a0x) / 10**12;
        (int) $a2 = $pc*$qc + $a1c + $a0c;
        echo $a2,sprintf("%012d",$a0x);
    }
?&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/07/41-01-01-02.png" alt="" class="wp-image-5855"/></figure>



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



<p>問題文の入力例がよく分からなかったのですが、</p>



<p>入力例が「1 5」（1から5）の場合は、1+2+3+4+5=15となるようにする問題です。</p>



<p>ただ、桁数が大きくてPHPではオーバーフローを起こしてしまいました。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    //入力値 1 10000000000の場合
    list($a, $b) = explode(" ", trim(fgets(STDIN)));
    
    $ans = (($a + $b) * ($b - $a + 1) / 2);
    
    echo $ans; //5.0000000005E+19
?&gt;</pre></div>



<p></p>



<p>PHP以外では↑のコードで通過するようです（各言語に直してください）。</p>



<p>解答例のコードは、どうしてもオーバーフローをなんとかする方法が見つからなくて、paizaの森で質問して教えてもらいました。(*'ω'*)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/41-etc-01-01-00497/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【スタック・キューメニュー】箱とボール (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/20-stack_queue-04-06-00496/</link>
					<comments>https://chokomon.com/20-stack_queue-04-06-00496/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 18 Jul 2022 00:01:16 +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=5842</guid>

					<description><![CDATA[【スタック・キューメニュー】&#62; FINAL問題 箱とボール (paizaランク B 相当)&#160;[難易度:&#160;2043&#160;±43] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/20-stack_queue/">スタック・キューメニュー</a>】&gt; <a href="https://paiza.jp/works/mondai/stack_queue/stack_queue__practice_step6" target="_blank" rel="noreferrer noopener">FINAL問題 箱とボール (paizaランク B 相当)</a>&nbsp;[難易度:&nbsp;<strong>2043&nbsp;±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/07/20-04-06-01.png" alt="" class="wp-image-5843"/></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>幅 1 の筒状の箱に数値の書かれた直径 1 のボールを入れます。各ボールは同じ数値のボールが隣合ったときに結合し、数値が 2 倍になります。それぞれ A_i と書かれた N 個のボールがあり、順番に箱の底へ入れていきます。最終的な箱の中のようすを、箱の天井から順に出力してください。</p>



<p></p>



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



<p><strong>出力値（例）</strong><br>3<br>4<br>10<br>2<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
    $n = trim(fgets(STDIN));
    $a = explode(" ", trim(fgets(STDIN)));
    
    $box = [];
    
    for ($i = 0; $i &lt; $n; $i++) {
        array_push($box, $a[$i]);
        
        while (count($box) &gt;= 2) {
            $top1 = $box[count($box) - 1];
            array_pop($box);
            
            $top2 = $box[count($box) - 1];
            array_pop($box);
            
            if ($top1 == $top2) {
                array_push($box, $top2 * 2);
                
            } else {
                array_push($box, $top2);
                array_push($box, $top1);
                break;
            }
        }
    }
    
    while (count($box) &gt; 0) {
        echo $box[count($box) - 1]. "\n";
        array_pop($box);
    }
?&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="240" src="https://chokomon.com/wp-content/uploads/2022/07/20-04-06-02.png" alt="" class="wp-image-5844"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/20-stack_queue-04-06-00496/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【スタック・キューメニュー】最大の区間和 (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/20-stack_queue-04-02-00492/</link>
					<comments>https://chokomon.com/20-stack_queue-04-02-00492/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Fri, 15 Jul 2022 18:39:50 +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=5818</guid>

					<description><![CDATA[【スタック・キューメニュー】&#62; STEP: 2 最大の区間和 (paizaランク B 相当)&#160;[難易度:&#160;2124&#160;±46] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/20-stack_queue/">スタック・キューメニュー</a>】&gt; <a href="https://paiza.jp/works/mondai/stack_queue/stack_queue__practice_step2" target="_blank" rel="noreferrer noopener">STEP: 2 最大の区間和 (paizaランク B 相当)</a>&nbsp;[難易度:&nbsp;<strong>2124&nbsp;±46</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/07/20-04-02-01.png" alt="" class="wp-image-5819"/></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 個の要素からなる数列 A があります。 A に含まれる連続した X 個の要素の和の最大値とその区間の左端の値を出力してください。ただし、要素の和の最大となる区間が複数ある場合はそのうちもっとも先頭の値を出力してください。<br>たとえば、&nbsp;<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">N = 4</mark></code>&nbsp;,&nbsp;<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">A = [2, 3, 4, 1]</mark></code>&nbsp;,&nbsp;<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">X = 2</mark></code>&nbsp;とします。連続した 2 個の要素の和が最大となる区間は A の 2 番目から 3 番目まで(&nbsp;<code>3 + 4 = 7</code>&nbsp;が最大値 )なので、最大値 7 とその区間の左端の値 3 を出力します。</p>



<p>また、実行時間に注意しましょう。たとえば以下の Python3 のプログラムのような、数列の要素数 N と和を求める連続する要素数 X を用いて、約 N * X 回足し算をおこなうプログラムはタイムオーバーになってしまうことがあります。キューまたはスタックを用いて効率のよいプログラムを意識しましょう。</p>



<p></p>



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



<p><strong>出力値（例）</strong><br>7 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
    list($n, $x) = explode(" ", trim(fgets(STDIN)));
    $a = explode(" ", trim(fgets(STDIN)));
    
    $total_max = 0;
    $left_num = $a[0];
    
    for ($i = 0; $i &lt; $x; $i++) {
        $total_max += $a[$i];
    }
    
    $tmp_sum = $total_max;
    
    for ($i = 0; $i &lt; ($n - $x); $i++) {
        $tmp_sum -= $a[$i];
        $tmp_sum += $a[$i + $x];
        
        if ($tmp_sum &gt; $total_max) {
            $left_num = $a[$i + 1];
            $total_max = $tmp_sum;
        }
    }
    
    printf("%d %d\n", $total_max, $left_num);
?&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/07/20-04-02-02.png" alt="" class="wp-image-5820"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/20-stack_queue-04-02-00492/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【paizaの森練習問題コンテスト3】ラッキーナンバー (paizaランク B)-解答例-PHP編</title>
		<link>https://chokomon.com/38-forest_contest-03-05-00446/</link>
					<comments>https://chokomon.com/38-forest_contest-03-05-00446/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Fri, 08 Jul 2022 01:40:53 +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=5526</guid>

					<description><![CDATA[【paizaの森練習問題コンテスト3】過去問題3 >ラッキーナンバー (paizaランク B 相当) [難易度: 2046 ±44] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例 感想 めちゃめちゃ難しかったで…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/paiza_set/38-forest_contest/">paizaの森練習問題コンテスト3</a>】<a href="https://paiza.jp/works/mondai/forest_contest_003/forest_contest_003__b_lucky_number" target="_blank" rel="noreferrer noopener">過去問題3 >ラッキーナンバー (paizaランク B 相当)</a> [難易度: <strong>2046 ±44</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/07/38-03-05-01.png" alt="" class="wp-image-5527"/></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>与えられた数字を組み合わせて、ラッキーナンバー777を作ろうと考えました。</p>



<p>n個の自然数が与えられるので、足して777になる数字の組み合わせを見つけて、</p>



<p>それらの数字を小さい順に出力してください。</p>



<p>ただし、そのような組み合わせが複数ある場合には multiple answers<br>そのような組み合わせがない場合には no answer<br>を出力してください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>4<br>333<br>222<br>444<br>666</p>



<p><strong>出力値（例）</strong><br>333 444</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
    $n = trim(fgets(STDIN));
    for($i = 0; $i &lt; $n; $i++) {
        $numbers[] = trim(fgets(STDIN));
    }
    
    sort($numbers);
    
    for($i = 0; $i &lt; 1 &lt;&lt; $n; $i++) {
        $ans =[];
        $total = 0;
        
        for($j = 0; $j &lt; $n; $j++) {
            if(($i &gt;&gt; $j) &amp; 1) {
                $ans[] = $numbers[$j];
                $total += $numbers[$j];
            }
        }
        if($total == 777) {
            $answers[] = $ans;
        }
    }
    $l = 0;
    
    if(!empty($answers)) {
        $l = count($answers);
        foreach($answers as $value) {
            $buf = $value;
            $result = implode(' ', $buf);
        }    
    }

    if($l == 0) {
        echo "no answer";
    } elseif($l == 1) {
        echo $result;
    } else {
        echo "multiple answers";
    }
?&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/07/38-03-05-02.png" alt="" class="wp-image-5528"/></figure>



<h2 class="wp-block-heading">感想</h2>



<p>めちゃめちゃ難しかったです。</p>



<p>ビット演算という手法がよく分からなくてあれやこれやという感じです。</p>



<p>もっと勉強してちゃんと解説できるように頑張ります。(*'ω'*)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/38-forest_contest-03-05-00446/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
