Time Limit: 2 sec / Memory Limit: 256 MB
問題文
うなぎはクリスマスにサンタうさぎから数列 S=\{S_1,S_2,...,S_N\} をもらいました。
うなぎは数列に含まれる数の総和を求めてみることにしました。
数列 S は、以下のような疑似コードで生成されるものです。
input N input X,T,A,B,C for i = 1 ... N: S_i = X for j = 1 ... T: X = (A*X + B) mod C
入力
入力は以下の形式で標準入力から与えられる。
N X T A B C
- 1 行目には、整数 N (1≦N≦10^6) が与えられる。
- 2 行目には、5 つの整数 X,T,A,B,C (0≦X<C, 1≦T≦10^9, 0≦A<C, 0≦B<C, 1≦C≦10^9) が空白区切りで与えられる。
出力
数列 S に含まれる数の総和を出力せよ。 出力の末尾に改行を入れること。
入力例 1
5 5 2 3 2 1000
出力例 1
1281
数列は \{5,53,485,373,365\} となり、総和は 1281 となる。
入力例 2
1000000 868183950 1000000000 209366437 803988878 999999937
出力例 2
499932726887669
Time Limit: 3 sec / Memory Limit: 256 MB
問題文
クリスマスの季節になった。うさぎは、クリスマスパーティをするためにクリスマスツリーを作っている。しかし、うさぎは不器用なのでまったくツリーが作成できていない。さらに悪い事に、ツリーの部品となる枝を何本か折ってしまった。もうすぐパーティが始まるため急いでクリスマスツリーを作らなければならない。
うさぎの作ろうとしているクリスマスツリーは N 頂点 N-1 辺からなる無向連結グラフである。 頂点にはそれぞれ 1 から N までの整数の番号が付いている。基本的にクリスマスツリーには任意の頂点対 (u, v) からなる辺を使って良い。 しかし、うさぎが M 本の辺を折ってしまったため、この折れた M 本の辺をクリスマスツリーに使うことはできない。
うさぎの代わりにクリスマスツリーを作ってあげて欲しい。
入力
入力は以下の形式で標準入力から与えられる。
N M p_1 q_1 p_2 q_2 : p_M q_M
- 1 行目には 2 つの整数 N, M (1 ≦ N ≦ 2 \times 10^5, 0 ≦ M ≦ 2 \times 10^5) が空白区切りで与えられる。
- 続く M 行目には 2 つの整数 p_i, q_i (1 ≦ p_i, q_i ≦ N, p_i ≠ q_i)が入力される。これは辺 (p_i, q_i) が折れている辺であることを表す。入力される M 本の折れている辺は互いに異なることが保証されている。
出力
もし、与えられた条件のもとでクリスマスツリーを作れない場合、No
と出力せよ。
そうでない場合、はじめに Yes
と出力し、次の N-1 行に整数を 2 つ空白区切りで出力せよ。出力の i+1 (1 ≦ i ≦ N-1) 行目の 2 つの整数をそれぞれ u_i, v_i とすると、これはクリスマスツリーに辺 (u_i, v_i) が使われることを表す。
条件を満たす解が複数ある場合、どれを出力しても正解となる。
入出力例
入力例 1
5 1 1 5
出力例 1
Yes 1 2 1 3 1 4 2 5
入力例 2
4 3 1 2 1 3 2 3
出力例 2
Yes 1 4 2 4 3 4
入力例 3
5 8 3 5 3 4 2 4 5 1 2 3 5 4 4 1 1 3
出力例 3
No
Time Limit: 2 sec / Memory Limit: 256 MB
問題文
うさぎは H 行 W 列のマス目を何色かの色で塗り分けました。i (1≦i≦H) 行目 j (1≦j≦W) 列目のマスをマス (i,j) と呼ぶことにします。
うなぎはこのマス目に点対称な長方形がいくつ含まれているかが気になっています。
しかし、うさぎはマス目を見せてくれません。
うなぎは代わりに、以下のような質問をすることで点対称な長方形の個数を調べようとしています。
- 「マス (a,b) とマス (c,d) が同じ色かつ、マス (a,d) とマス (c,b) が同じ色」は正しいですか?
ただし、うさぎは気が短いので 4,500 回までしか質問に答えてくれません。
入出力
まず、マス目の行数・列数を表す 2 つの整数 H (1 ≦ H ≦ 5), W (1 ≦ W ≦ 100) が空白区切りで標準入力に与えられる。
H W
続いて、あなたのプログラムは 0 回以上 4,500 回以下の質問を行うことができる。
各質問ではまず、文字 ?
と 4 つの整数 a (1 ≦ a ≦ H), b (1 ≦ b ≦ W), c (a ≦ c ≦ H), d (b ≦ d ≦ W) を空白区切りで出力する。これは、「マス (a,b) とマス (c,d) が同じ色かつマス (a,d) とマス (c,b) が同じ色、は正しいですか?」という質問を表す。
? a b c d
すると、あなたのプログラムには yes
または no
の文字列が与えられる。
最後に、あなたのプログラムは、文字 !
と答えを空白区切りで出力しなければならない。
! answer
答えを出力した後、あなたのプログラムは直ちに終了しなければならない。 終了しなかった場合のジャッジ結果は不定である。
また、正しくない出力をした場合の結果も不定である(必ずしも WA
になるとは限らない)。
また、質問の回数制限を超えた場合も WA
になることに注意せよ。
あなたのプログラムが正しい答えを出力して終了した場合、正答とみなされる。
出力した後に、出力をflushしなければならないことに注意せよ。flushしなかった場合、TLEとなることがある。
各言語での入出力の方法は過去の AtCoder で出題されている問題 (リンク: ABC 019 D: 高橋くんと木の直径) を参考にしてもよい。
入出力例
うさぎが塗ったマス目が以下の画像のようなものであったときの入出力例を示す。
うさぎが塗ったマス目の例
説明 | プログラムの出力 | プログラムへの入力 |
---|---|---|
マス目の行数・列数が与えられている。 | 2 3 | |
「マス (1,1) とマス (2,3) が同じ色かつマス (1,3) とマス (2,1) が同じ色、は正しいですか?」という質問をしている。 | ? 1 1 2 3 | |
質問の答えが与えられている。 | yes | |
「マス (1,1) とマス (1,1) が同じ色かつマス (1,1) とマス (1,1) が同じ色、は正しいですか?」という質問をしている。 | ? 1 1 1 1 | |
質問の答えが与えられている。 | yes | |
「マス (1,1) とマス (1,3) が同じ色かつマス (1,3) とマス (1,1) が同じ色、は正しいですか?」という質問をしている。 | ? 1 1 1 3 | |
質問の答えが与えられている。 | no | |
マス目に含まれる点対称な長方形は 10 個であるという回答をしている。 | ! 10 |
マス目に含まれる点対称な長方形は以下の 10 個であるため、正解となる。
マス目に含まれる点対称な長方形
Time Limit: 3 sec / Memory Limit: 256 MB
問題文
これは Xmas Contest 2015 の問題です。
これは Xmas Contest 2015 の問題で文字列に関するものです。
これは Xmas Contest 2015 の問題で文字列に関するもので漸化式に基づいてたくさんの文字列を作ります。
これは Xmas Contest 2015 の問題で文字列に関するもので漸化式に基づいてたくさんの文字列を作ってそれらの周期を求めます。
これは Xmas Contest 2015 の問題で文字列に関するもので漸化式に基づいてたくさんの文字列を作ってそれらの周期を求めるけどあと 4 時間で AC しないといけません。
ぼくのすきな事はプログラミングコンテストです。 ぼくのゆめは Xmas Contest 2015 で全部の問題を解くことです。
2016 年になってもコンテストシステムにやさしくします。
(参考: https://twitter.com/kyuridenamida/status/678495822946811904)
N 要素の整数列 A と、N 文字の英小文字からなる文字列 C を使って以下のように N+1 個の文字列 S_0, S_1, ..., S_N を生成する。
- まず S_0 を空文字列とする。
- i = 1, 2, ..., N について、文字列 S_i は文字列 S_{A_i} の末尾に C の i 番目の文字を付け加えたものである。ただし、任意の i について A_i < i が成り立つ。
このようにして作られた文字列のうち S_1, S_2, ..., S_N の N 個についてその周期を求めよ。
ただし文字列 T の周期とは、T がある文字列 X を無限回繰り返してできる文字列の接頭辞になっているような X のうち最も短いものの長さである。たとえば abcabca
の周期は 3 であり、abcabd
の周期は 6 である。
入力
入力は以下の形式で標準入力から与えられる。
N A_1 A_2 … A_N C
- 1 行目には整数 N (1≦N≦5 \times 10^5) が与えられる。
- 2 行目には N 要素の整数列 A が空白区切りで与えられる。すべての i (1≦i≦N) に対し 0≦A_i<i を満たす。
- 3 行目には N 文字の文字列 C が与えられる。C は英小文字のみからなる。
出力
N 行出力せよ。そのうち i (1≦i≦N) 行目には文字列 S_i の周期を表す整数を 1 つ出力せよ。
出力の末尾にも改行を入れること。
入力例 1
8 0 1 2 3 4 5 6 5 abcabcad
出力例 1
1 2 3 3 3 3 3 6
この例において各 S_i とその周期は次のようになる。
- S_1 は
a
となり、その周期は 1 である。 - S_2 は
ab
となり、その周期は 2 である。 - S_3 は
abc
となり、その周期は 3 である。 - S_4 は
abca
となり、その周期は 3 である。 - S_5 は
abcab
となり、その周期は 3 である。 - S_6 は
abcabc
となり、その周期は 3 である。 - S_7 は
abcabca
となり、その周期は 3 である。 - S_8 は
abcabd
となり、その周期は 6 である。
入力例 2
11 0 0 1 2 3 1 2 5 4 3 6 xmascontest
出力例 2
1 1 2 2 3 2 2 4 3 3 3
Time Limit: 2 sec / Memory Limit: 256 MB
ストーリー
くろうさ「通常言語を使用するのは甘え」
しろうさ「……嫌な予感」
くろうさ「足し算と引き算は許してあげる」
しろうさ「えっとえっと」
くろうさ「特殊な形のwhile文は使ってもいいよ。あ、他にも色々制限しちゃう」
しろうさ「条件分k
くろうさ「というわけで今回もがんばってねっ」
(元ネタ:Xmas Contest 2014 Problem A: A+B Problem)
問題文
N 個のうさぎ小屋があり、M 羽のうさぎさんがいる。 各うさぎ小屋には 1 ~ N の番号が振られており、各うさぎさんには 1 ~ M の番号が振られている。
あなたの仕事は以下のようなクエリが Q 個与えられるので、順に処理することである。
- タイプ 1 : 番号 Y のうさぎさんがうさぎ小屋 X の中に入る。
- タイプ 2 : うさぎ小屋 X に入っているうさぎさんのうち、最初に入ったうさぎさんを 1 番目として、Y 番目にうさぎ小屋に入ったうさぎさんの番号を答える。
あなたはこのクエリの処理を次の言語概要で述べる言語で実装しなければならず、「初期化処理」「タイプ 1 のクエリの処理」「タイプ 2 のクエリの処理」の 3 種類のプログラムを作成し、そのソースコードを提出しなければならない。フォーマットは出力の項を参照すること。
ただし、ただ実装するだけでなく、言語概要で述べられている BNF 内の非終端記号 expr の評価回数が与えられる定数 L 以下でなくてはならない。
言語概要
実装に使用する言語には、以下のような特徴がある。
- メモリは基本的に、それぞれの要素に [0,9999] の範囲の整数のみが格納できる長さ 10000 の配列 a のみである。a[i] で i 番目(0-indexed)の要素にアクセスできる。タイプ 2 のクエリでは、答えを格納する変数 A が利用できる。
- 使用できる定数も [0,9999] の範囲の整数である。
- 演算の途中過程で現れる数値も [0,9999] の範囲に収まっていなければならず、収まっていない場合エラーとなる。足し算と引き算は全て左結合で行われる。
- 用いることができる主な機能は、「代入」「加算・減算」「while (式 < 式) {実行文}」のみである。while(式<式){実行文}は、"式<式" が真の間のみ実行文を実行する繰り返し文である。
- 入力は定数を通して受け取る。
- タイプ 2 に対する回答は、変数 A への代入という形で行う。 A へのアクセスはクエリ毎に 1 度しかできず、2 度以上アクセスした場合エラーとなる。
- 各セクション(初期化、タイプ 1、タイプ 2 )によって、参照・代入できる定数・変数が異なる。そのセクションで使えない定数・変数に対する操作をしようとするとエラーとなる。
各セクションで使える定数一覧は次の通りである。
- 初期化: N,M
- タイプ1: N,M,X,Y
- タイプ2: N,M,X,Y
各セクションで使える変数一覧は次の通りである。
- 初期化: a
- タイプ1: a
- タイプ2: a,A
言語の BNF は以下の通りである。
<program> ::= <command> | <command> "\n" <program> <command> ::= <assign> | <repetition> <assign> ::= <var> "=" <expr> <expr> ::= <param> | <param> "+" <expr> | <param> "-" <expr> <repetition> ::= "while(" <expr> "<" <expr> "){\n" <program> "\n}" <param> ::= "(" <expr> ")" | <var> | <const> <var> ::= "a[" <expr> "]" | "A" <const> ::= <number> | "N" | "M" | "X" | "Y" <number> ::= <nonzero-digit> | <number> <digit> <digit> ::= "0" | <digit> <nonzero-digit> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
採点方法
採点は採点プログラムを通して行う。
採点プログラムは以下のように動作する。文法が与えられた BNF に沿っていない場合や、実行時にエラーを起こした場合は不正解として扱われる。また、指定された L よりも多く expr 非終端記号を呼び出した場合は、「QLE」と表示され、不正解として扱われる。
- 定数 N,M を入力で与えられたものに設定する。
- 配列変数 a の全ての要素を 0 で初期化する。
- 次に、「初期化処理」に記述されているコードを一度だけ実行する。
- その後、クエリが与えられる。
- タイプ 1 のクエリが来たときには、定数 X,Y をクエリで与えられたものに設定し、「タイプ 1 のクエリの処理」に記述されているコードを実行する。
- タイプ 2 のクエリが来たときには、定数 X,Y をクエリで与えられたものに設定し、変数 A を 0 に初期化し、「タイプ 2 のクエリの処理」に記述されているコードを実行する。コード実行後、変数 A に書き込まれている値を出力する。
ただし、採点プログラム(インタプリタ)は、構文解析を行う前に以下のような前処理を行う。
- 空白・タブ・リターンコード・空行は予め削除する。そのような仕様なので、例えば "A = 1 0" という記述は内部的に "A=10" として扱われることに注意。
- 各行の最初に現れる ";" 以降の文字列はコメントとして判断し、構文解析を行う前に削除する。
採点プログラムのインタプリタの javascript 版が、このページの下部で利用可能である。
入力
入力は以下の形式で記述されているが、採点プログラムがあなたの記述したプログラムに定数として与えるので、あなたは意識する必要がない。 インタプリタを利用したテストの際は参考にすること。
N M Q L T_1 X_1 Y_1 T_2 X_2 Y_2 : T_Q X_Q Y_Q
- 1 行目には、うさぎ小屋の数 N、うさぎさんの数 M、クエリの数 Q、非終端記号exprの呼び出し上限回数 Lが書かれている。N,M,Q,L の制約は部分点の項を参照せよ。
- 2 行目からの Q 行のうち i (1≦i≦Q) 行目には、i 番目のクエリの情報が与えられる。これは i 番目に、タイプ T_i(1≦T_i≦2) のクエリを (X,Y)=(X_i,Y_i) として呼び出すことを意味する。
- タイプ 1 のクエリにおいて、一羽のうさぎさんが複数のうさぎ小屋に入るようなクエリは与えられない。
- タイプ 2 のクエリにおいて、答えが存在しないようなクエリは与えられない。
部分点
この問題には部分点が設定されている。
- N=400,1≦M≦500,1≦Q≦1000,L=4000000 という制約を満たすデータセットに正解した場合は、 30 点が与えられる。
- N=400,1≦M≦4000,1≦Q≦8000,L=1500000 という制約を満たすデータセットに正解した場合は、上記とは別に 70 点が与えられる。
出力
出力は標準出力に行うこと(catを用いることを推奨する)。
あなたは指定された言語で書かれたプログラムソース自体を出力しなければならない。また、
初期化処理 ---- タイプ 1 のクエリの処理 ---- タイプ 2 のクエリの処理
のように"----"で区切られた形式でならなければならない。各処理は空であってはならず、必ず 1 つ以上の命令を含まなければならない。
コメントも含めマルチバイト文字を含んでいる場合、javascript 版で動作したとしても、ジャッジ側で正しく動作しない可能性があるので含まないこと。
末尾の改行はあっても無くても採点プログラムの動作に影響はない。
あまりにも長すぎるコード(数MB規模)は正しく採点されない可能性が高い。その場合 IE(内部エラー) となる。また、プログラムの実行時間に、採点プログラムの動作時間は含まれない。
入力例1
10 5 8 54 1 1 5 2 1 1 1 10 4 1 10 2 1 10 3 2 10 1 2 10 2 2 10 3
出力例1
a[0] = 1 ; This is a comment a[1] = 5 ; Don't include any multibyte character in your program a[2] = 4 a[3] = 2 a[4] = 3 ---- a[2015] = X ; no meaning a[2016] = Y ; no meaning too ---- A = a[a[0]]; a[0] = a[0] + 1
- 1 番目のクエリでは、うさぎ小屋 1 に番号 5 のうさぎさんが入る。
- 2 番目のクエリでは、うさぎ小屋 1 に 1 番目に入ったうさぎさんの番号を求められている。 5 が答えである。
- 3 番目のクエリでは、うさぎ小屋 10 に番号 4 のうさぎさんが入る。
- 4 番目のクエリでは、うさぎ小屋 10 に番号 2 のうさぎさんが入る。
- 5 番目のクエリでは、うさぎ小屋 10 に番号 3 のうさぎさんが入る。
- 6 番目のクエリでは、うさぎ小屋 10 に 1 番目に入ったうさぎさんの番号を求められている。4 が答えである。
- 7 番目のクエリでは、うさぎ小屋 10 に 2 番目に入ったうさぎさんの番号を求められている。2 が答えである。
- 8 番目のクエリでは、うさぎ小屋 10 に 3 番目に入ったうさぎさんの番号を求められている。3 が答えである。
出力例1のプログラムは入力例1の答えを埋め込んでおり、expr 非終端記号の評価回数はちょうど 54 回なので、このテストケースに対して正答を得ることができる。 ただし、当然ながらこのプログラムを提出しても点数を得ることはできない。
入力はあなたの出力したプログラムに対して採点プログラムを通して与えられるものであり、標準入力には何も与えられないことに注意せよ。すなわち、埋め込みソースを自動生成するような解き方は困難である。
また、この入出力例は L=54 のケースであり、どの部分点の制約も満たさないため、採点データに含まれていない。
言語のインタプリタ
- このインタプリタのソースコードを利用して問題を解く道具を作成しても構いません。
- 何か変な挙動を見つけたら clar お願いします。ただし、「入力」の部分についてはフォーマットチェックしていません。
- 去年のhosさんのコンテスト(Xmas Contest 2014)のA+B Problemのページを参考に作られました。
プログラム
入力
結果
Time Limit: 4 sec / Memory Limit: 750 MB
問題文
(1, 2, ..., N) の順列 a_i と Q 個のクエリが与えられる。i 番目のクエリの内容は、x_i が与えられるので数列の x_i 番目と x_i+1 番目の要素の値を入れ替える、というクエリである。
クエリで数列が変更されるたびに、それが良い数列となっているか判定せよ。ただし良い数列は以下のように定義される数列である。
3 つのスタックを考える。それぞれを stack1、stack2、stack3 と呼ぶことにする。最初に、stack1 に a_1, a_2, ..., a_n をこの順に push する。その後、
- stack1 から pop し、pop した整数を x とする。x を stack2 に push する。
- stack2 から pop し、pop した整数を x とする。x を stack3 に push する。
という 2 種類の動作を好きなように行い、stack3 の要素を先頭から見た時 1, 2, ..., N となるように出来るとき、a_i は良い数列である。
ただし、push とはスタックの末尾に要素を追加する動作、pop はスタックの末尾から要素を取り出す動作のことを指す。
入力
入力は以下の形式で標準入力から与えられる。
N a_1 a_2 a_3 ... a_N Q x_1 x_2 : x_Q
- 1 行目には順列の長さ N(2 ≦ N ≦ 100,000) が与えられる。
- 2 行目には数列 a_i が空白区切りで与えられる
- 3 行目にはクエリの個数 Q(1 ≦ Q ≦ 100,000) が与えられる。
- 続く Q 行にはクエリの内容を表す整数 x_i (1 ≦ x_i ≦ N-1) が与えられる。
出力
出力は標準出力に行い、末尾に改行を入れること。
出力は Q 行からなる。
i 行目には、i 番目のクエリの後に a_i が良い数列となっているならば Yes
、そうでなければ No
と出力せよ。
入力例 1
3 1 3 2 6 2 2 1 2 1 2
出力例 1
Yes No Yes Yes Yes Yes
Time Limit: 2 sec / Memory Limit: 256 MB
問題文
うなぎはクリスマスにサンタうさぎから数列 A=\{A_1,A_2,...,A_N\} をもらいました。
うなぎは数列 A からいくつか(0 個でもよい)の要素を消して、「良い数列」を作ることにしました。数列 x が良い数列であるとは、以下のような性質を満たすことを指します。
- すべての i (2 ≦ i ≦ |x|-1) について、x_i は x_{i-1}, x_i, x_{i+1} のうちの中央値でない。
例えば x=\{2,1,3,2\} や x=\{2,1,2\} は条件を満たしますが、x=\{1,2,3\} や x=\{1,1,3,2\} は条件を満たしません。 また、長さが 3 未満の数列も条件を満たします。
数列 x のデコボコ度を隣接する数の差の和とします。デコボコ度を数式で表すと、Σ_{1 ≦ i ≦ |x|-1} |x_i - x_{i+1}| となります。
このとき、作ることのできる良い数列のデコボコ度の最大値を求めてください。
入力
入力は以下の形式で標準入力から与えられる。
N A_1 A_2 ... A_N
- 1 行目には、数列 A の長さを表す整数 N (2≦N≦10^5) が与えられる。
- 2 行目には、N 個の整数が空白区切りで与えられる。このうち i (1 ≦ i ≦ N) 番目には整数 A_i (0 ≦ A_i ≦ 10^9) が与えられる。
部分点
この問題には部分点が設定されている。
- N≦1,000 を満たすデータセットに正解した場合は、20 点が与えられる。
- 追加制約のないデータセットに正解した場合は、上記とは別に 80 点が与えられる。
出力
数列 A からいくつかの要素を消すことで得られる良い数列のうちのデコボコ度の最大値を出力せよ。 出力の末尾に改行を入れること。
入力例 1
5 1 1 3 2 1
出力例 1
4
例えば、1,4 番目の要素を消すと \{1,3,1\} となり、デコボコ値は 4 となります。
入力例 2
7 2 1000000000 0 1000000000 1 1000000000 5
出力例 2
5999999991
Time Limit: 2 sec / Memory Limit: 256 MB
問題文
うなぎは A 問題と G 問題を作っていましたが、入力データを作るのが退屈になってしまいました。
そこでうなぎは、どちらの問題のものとしても正しい入力データを作ることにしました。
しかしそれだけで満足しなかったうなぎは、どちらの問題でも答えが Z になるような入力データを作ることができないかと考えました。
うなぎは T 個の Z の値を思いついたので、それぞれに対し、上記のような入力データを作ることにしました。
入力
入力は以下の形式で標準入力から与えられる。
T Z_1 Z_2 : Z_T
- 1 行目には、うなぎが思いついた Z の個数を表す整数 T (1≦T≦100) が与えられる。
- 2 行目からの T 行のうち i (1≦i≦T) 行目には、整数 Z_i (0≦Z_i≦10^9) が与えられる。
部分点
この問題には部分点が設定されている。
- T = 1 かつ Z_1 = 2015 を満たすデータに正解した場合は、40 点が与えられる。
- 追加制約のないデータセットに正解した場合は、上記とは別に 60 点が与えられる。
出力
各 i (1≦i≦T) について、A 問題の答えと G 問題の答えがどちらも Z_i になるような入力データを順番に出力せよ。ただし、そのような入力データが存在しない場合には代わりに No
と出力せよ。
出力の末尾に改行を入れること。
入力例 1
2 2015 1000000000
出力例 1
5 1 2 3 4 5 No
この出力例は出力形式の確認のためのものであり、実際には間違っています。