Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
flakepym was typing the string SCSC on his computer and accidentally omitted one character. Find the missing character.
Constraints
- The string S has length 3 and consists only of the uppercase letters
SandC. - The given string can be obtained by removing exactly one character from
SCSC.
Input
The input is given from Standard Input in the following format:
S
Output
Output the omitted character as an uppercase letter.
Sample Input 1
CSC
Sample Output 1
S
Sample Input 2
SSC
Sample Output 2
C
表示言語
/ /점수 : 100 점
문제
flakepym은 컴퓨터에서 문자열 SCSC를 입력하다가 실수로 한 글자를 빠뜨렸다. 빠진 한 글자를 찾아보자.
제한
- 문자열 S는 길이가 3이고
S,C로만 이루어져 있다. - 주어지는 문자열은
SCSC에서 문자 하나를 제거해서 얻을 수 있는 문자열이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
S
출력
빠진 글자를 알파벳 대문자로 출력한다.
입력 예 1
CSC
출력 예 1
S
입력 예 2
SSC
출력 예 2
C
表示言語
/ /配点 : 100 点
問題文
flakepymはコンピュータで文字列 SCSC を入力している途中で,誤って 1 文字を抜かしてしまいました.抜かした文字を求めてください.
制約
- 文字列 S の長さは 3 で,英大文字
S,Cのみからなる. - 与えられる文字列は,
SCSCから 1 文字を削除して得られる文字列である.
入力
入力は以下の形式で標準入力から与えられる.
S
出力
抜かした文字を英大文字で出力せよ.
入力例 1
CSC
出力例 1
S
入力例 2
SSC
出力例 2
C
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
Zye is writing AI inference code to run on REGULUS using Mobilint's SDK. Since Zye is a developer who is not very good at coding, the code he writes can compute only tree-shaped graphs.
Using this code, Zye wants to compute a rooted tree-shaped computation graph consisting of N tensors. The root of the tree is node 1. Node i of the tree represents a tensor of size w_i MiB.
A tensor represented by a leaf node is called an input tensor, and a tensor represented by a non-leaf node is called a result tensor. Input tensors already exist in memory in the initial state. The memory usage in the initial state is at most M MiB.
To compute the result tensor represented by node i, all tensors represented by the children of i must currently exist in memory. When computing the result tensor represented by node i, first the result tensor of size w_i MiB is allocated in memory. After the computation is finished, all tensors represented by the children of i are removed from memory.
The memory usage at a certain moment is defined as the sum of the sizes of all tensors that exist in memory at that moment.
Zye wants to choose the computation order so that the peak memory usage while computing the tensor represented by the root node is minimized. The peak memory usage is the maximum memory usage over the initial state and all moments during the computation.
The memory limit of the computer is M MiB. During the computation, the memory usage must always be at most M MiB.
Find the minimum peak memory usage needed to compute the result tensor represented by the root node.
Constraints
- 2 \leq N \leq 5\,000
- M = 8\,192
- w_i = 1
- 1 \leq p_i \leq N
- The given graph is a rooted tree with root node 1.
- All input values are integers.
Input
The input is given from Standard Input in the following format:
N M w_1 w_2 \dots w_N p_2 p_3 \dots p_N
Here, p_i denotes the parent of node i.
Output
If it is possible to compute the result tensor represented by the root node so that the peak memory usage is at most M MiB, output the minimum possible peak memory usage.
Otherwise, output OOM instead.
Sample Input 1
8 8192 1 1 1 1 1 1 1 1 1 1 2 2 4 3 3
Sample Output 1
5
In the initial state, the tensors that exist in memory are the input tensors represented by leaf nodes 5,6,7,8. Therefore, the memory usage is 1+1+1+1=4 MiB.
For example, the result tensors can be computed in the following order.
- Compute the result tensor represented by node 4. The maximum memory usage during this step is 4+1=5 MiB.
- Compute the result tensor represented by node 3. The maximum memory usage during this step is 4+1=5 MiB.
- Compute the result tensor represented by node 2. The maximum memory usage during this step is 3+1=4 MiB.
- Compute the result tensor represented by node 1. The maximum memory usage during this step is 2+1=3 MiB.
The peak memory usage for this computation order is 5 MiB. It is impossible to make the peak memory usage at most 4 MiB, so the answer is 5.
表示言語
/ /Score : 100 points
문제
자이는 모빌린트의 SDK를 사용하여 REGULUS에서 실행할 AI 추론 코드를 작성하려고 한다. 자이는 코딩을 잘 하지 못하는 개발자이기 때문에 자이가 작성한 코드로는 트리 모양의 그래프만 계산할 수 있다.
자이는 이 코드로 텐서 N개로 이루어진 루트가 있는 트리 모양의 계산 그래프를 계산하려고 한다. 트리의 루트는 1번 노드이다. 트리의 i번 노드는 크기가 w_i MiB인 텐서를 가리킨다.
리프 노드가 가리키는 텐서를 입력 텐서, 리프가 아닌 노드가 가리키는 텐서를 결과 텐서라고 하자. 입력 텐서는 초기 상태에서 이미 메모리에 존재한다. 초기 상태의 메모리 사용량은 M MiB 이하이다.
i번 노드가 가리키는 결과 텐서를 계산하려면 i의 모든 자식 노드가 가리키는 텐서가 현재 메모리에 있어야 한다. i번 노드가 가리키는 결과 텐서를 계산할 때는 먼저 크기가 w_i MiB인 결과 텐서를 메모리에 할당하고, 계산이 끝나면 i의 모든 자식 노드가 가리키는 텐서를 메모리에서 제거한다.
어떤 시점의 메모리 사용량은 그 시점에 메모리에 존재하는 모든 텐서 크기의 합이다.
자이는 계산 순서를 적절히 조정해 루트 노드가 가리키는 텐서를 계산할 때의 피크 메모리 사용량을 최소화하려고 한다. 피크 메모리 사용량은 초기 상태와 모든 계산 과정에서의 메모리 사용량의 최댓값이다.
사용할 컴퓨터의 메모리 한도는 M MiB이다. 계산 과정에서 메모리 사용량은 항상 M MiB 이하여야 한다.
루트 노드가 가리키는 결과 텐서를 계산하는 데 필요한 피크 메모리 사용량의 최솟값을 구해 보자.
제한
- 2 \leq N \leq 5\,000
- M = 8\,192
- w_i = 1
- 1 \leq p_i \leq N
- 주어지는 그래프는 루트가 1번인 트리이다.
- 입력으로 주어지는 수는 모두 정수이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
N M w_1 w_2 \dots w_N p_2 p_3 \dots p_N
p_i는 i번 노드의 부모이다.
출력
피크 메모리 사용량이 M MiB 이하가 되도록 루트 노드가 가리키는 결과 텐서를 계산할 수 있다면 가능한 피크 메모리 사용량의 최솟값을 출력한다.
그렇지 않다면 대신 OOM을 출력한다.
입력 예 1
8 8192 1 1 1 1 1 1 1 1 1 1 2 2 4 3 3
출력 예 1
5
초기 상태에서 메모리에 존재하는 텐서는 5번, 6번, 7번, 8번 리프 노드가 가리키는 입력 텐서이다. 이때 메모리 사용량은 1+1+1+1=4 MiB이다.
예를 들어 다음 순서로 결과 텐서를 계산할 수 있다.
- 4번 노드가 가리키는 결과 텐서를 계산한다. 메모리 사용량의 최댓값은 4+1=5 MiB가 된다.
- 3번 노드가 가리키는 결과 텐서를 계산한다. 메모리 사용량의 최댓값은 4+1=5 MiB가 된다.
- 2번 노드가 가리키는 결과 텐서를 계산한다. 메모리 사용량의 최댓값은 3+1=4 MiB가 된다.
- 1번 노드가 가리키는 결과 텐서를 계산한다. 메모리 사용량의 최댓값은 2+1=3 MiB가 된다.
이 순서에서 피크 메모리 사용량은 5 MiB이다. 피크 메모리 사용량을 4 MiB 이하로 만드는 것은 불가능하므로 정답은 5이다.
表示言語
/ /配点 : 100 点
問題文
ザイは Mobilint の SDK を用いて,REGULUS 上で実行する AI 推論コードを書こうとしています.ザイはコーディングがあまり得意でない開発者なので,ザイが書いたコードでは木状のグラフしか計算できません.
ザイはこのコードで,N 個のテンソルからなる根付き木状の計算グラフを計算します.木の根は頂点 1 です.木の頂点 i は,サイズが w_i MiB であるテンソルを表します.
葉が表すテンソルを入力テンソル,葉でない頂点が表すテンソルを結果テンソルと呼びます.入力テンソルは初期状態ですでにメモリ上に存在します.初期状態でのメモリ使用量は M MiB 以下です.
頂点 i が表す結果テンソルを計算するためには,i のすべての子が表すテンソルが現在メモリ上に存在している必要があります.頂点 i が表す結果テンソルを計算するときは,まずサイズ w_i MiB の結果テンソルをメモリ上に確保します.その計算が完了した直後に,i のすべての子が表すテンソルをメモリから削除します.
ある時点でのメモリ使用量を,その時点でメモリ上に存在するすべてのテンソルのサイズの総和と定義します.
ザイは計算順序を適切に選ぶことで,根が表すテンソルを計算するときのピークメモリ使用量を最小化したいです.ピークメモリ使用量とは,初期状態および計算過程のすべての時点におけるメモリ使用量の最大値です.
使用するコンピュータのメモリ上限は M MiB です.計算中のどの時点においても,メモリ使用量は M MiB 以下でなければなりません.
根が表す結果テンソルを計算するために必要なピークメモリ使用量の最小値を求めてください.
制約
- 2 \leq N \leq 5\,000
- M = 8\,192
- w_i = 1
- 1 \leq p_i \leq N
- 与えられるグラフは頂点 1 を根とする根付き木である.
- 入力される数値はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
N M w_1 w_2 \dots w_N p_2 p_3 \dots p_N
ここで,p_i は頂点 i の親を表す.
出力
ピークメモリ使用量が M MiB 以下となるように根が表す結果テンソルを計算できるならば,可能なピークメモリ使用量の最小値を出力する.
そうでなければ,代わりに OOM を出力する.
入力例 1
8 8192 1 1 1 1 1 1 1 1 1 1 2 2 4 3 3
出力例 1
5
初期状態では,葉である頂点 5,6,7,8 が表す入力テンソルがメモリ上に存在します.したがって,このときのメモリ使用量は 1+1+1+1=4 MiB です.
例えば,次の順序で結果テンソルを計算できます.
- 頂点 4 が表す結果テンソルを計算する.このステップ中のメモリ使用量の最大値は 4+1=5 MiB である.
- 頂点 3 が表す結果テンソルを計算する.このステップ中のメモリ使用量の最大値は 4+1=5 MiB である.
- 頂点 2 が表す結果テンソルを計算する.このステップ中のメモリ使用量の最大値は 3+1=4 MiB である.
- 頂点 1 が表す結果テンソルを計算する.このステップ中のメモリ使用量の最大値は 2+1=3 MiB である.
この計算順序におけるピークメモリ使用量は 5 MiB です.ピークメモリ使用量を 4 MiB 以下にすることはできないため,答えは 5 です.
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
An infinite sequence (a_n) satisfies the following property.
- For every positive integer i satisfying i>N, a_i is equal to the K-th element of a_{i-N},a_{i-N+1},\dots,a_{i-1} after these values are sorted in nondecreasing order.
Once the values of a_1,\dots,a_N are determined, the values of a_{N+1},a_{N+2},\dots are uniquely determined.
You are given the values of N, K, M and a_1,\dots,a_N. Find a_M.
Constraints
- 1 \leq K \leq N \leq 300\,000
- 1 \leq M \leq 10^{18}
- -10^9 \leq a_i \leq 10^9
- All input values are integers.
Input
The input is given from Standard Input in the following format:
N K M a_1 a_2 \dots a_N
Output
Output the answer.
Sample Input 1
8 6 9 2 0 2 6 0 5 1 6
Sample Output 1
5
Sorting [2,0,2,6,0,5,1,6] in nondecreasing order, we have [0,0,1,2,2,5,6,6]. Since K=6, we have a_9=5.
Sample Input 2
1 1 1 1
Sample Output 2
1
表示言語
/ /점수 : 100 점
문제
수열 (a_n)은 다음 성질을 만족하는 무한 수열이다.
- i>N을 만족하는 모든 양의 정수 i에 대하여 a_{i-N},a_{i-N+1},\dots,a_{i-1}을 오름차순으로 정렬할 때 K번째에 오는 수가 a_i와 같다.
a_1,\dots,a_N의 값이 결정되면 a_{N+1},a_{N+2},\dots의 값은 유일하게 결정된다.
N, K, M과 a_1,\dots, a_N의 값이 주어질 때 a_M의 값을 구해 보자.
제한
- 1 \leq K \leq N \leq 300\,000
- 1 \leq M \leq 10^{18}
- -10^9 \leq a_i \leq 10^9
- 입력으로 주어지는 수는 모두 정수이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
N K M a_1 a_2 \dots a_N
출력
a_M을 출력한다.
입력 예 1
8 6 9 2 0 2 6 0 5 1 6
출력 예 1
5
[2,0,2,6,0,5,1,6]을 오름차순으로 나열하면 [0,0,1,2,2,5,6,6]이고 K=6이므로 a_9=5이다.
입력 예 2
1 1 1 1
출력 예 2
1
表示言語
/ /配点 : 100 点
問題文
無限数列 (a_n) は次の性質を満たします.
- i>N を満たすすべての正整数 i に対し,a_i は a_{i-N},a_{i-N+1},\dots,a_{i-1} を昇順に並べたときの K 番目の数に等しい.
a_1,\dots,a_N の値が決まると,a_{N+1},a_{N+2},\dots の値は一意に決まります.
N, K, M と a_1,\dots,a_N の値が与えられます.a_M の値を求めてください.
制約
- 1 \leq K \leq N \leq 300\,000
- 1 \leq M \leq 10^{18}
- -10^9 \leq a_i \leq 10^9
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
N K M a_1 a_2 \dots a_N
出力
a_M を出力せよ.
入力例 1
8 6 9 2 0 2 6 0 5 1 6
出力例 1
5
[2,0,2,6,0,5,1,6] を昇順に並べると [0,0,1,2,2,5,6,6] になります.K=6 なので,a_9=5 です.
入力例 2
1 1 1 1
出力例 2
1
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
utilForever visited the Sushisushi conveyor belt sushi restaurant. Its conveyor belt has a total of N positions where sushi can be placed. Initially, K_i pieces of sushi are stacked at the i-th position, and eating the j-th sushi from the top at the i-th position gives satisfaction X_{i,j}. X_{i,j} may be negative.
Starting with today's lunch, utilForever will eat for T days. At lunch each day, utilForever can eat at most one sushi, namely the top sushi among the sushi at position 1. The conveyor belt moves by 1 position every night. Sushi that was at position i+1 moves to position i, and sushi that was at position 1 moves to position N.
Find the maximum possible total satisfaction utilForever can obtain.
Constraints
- 1 \leq N,T \leq 10^6
- 0 \leq K_i \leq 10^6
- \sum_{i=1}^N K_i \leq 10^6
- -100 \leq X_{i,j} \leq 100
- All input values are integers.
Input
The input is given from Standard Input in the following format:
N T
K_1 X_{1,1} X_{1,2} \dots X_{1,K_1}
K_2 X_{2,1} X_{2,2} \dots X_{2,K_2}
\vdots
K_N X_{N,1} X_{N,2} \dots X_{N,K_N}
Output
Output the maximum possible total satisfaction utilForever can obtain.
Sample Input 1
4 10 5 31 4 -15 9 26 3 53 -5 -89 3 -79 -32 -38 0
Sample Output 1
88
表示言語
/ /점수 : 100 점
문제
utilForever는 스시스시 회전초밥집에 갔다. 스시스시 회전초밥집의 회전초밥 레일에는 초밥을 놓을 수 있는 칸이 N개 있다. 처음에 i번째 칸에는 초밥이 K_i개 쌓여 있으며, 그중 i번째 칸의 위에서 j번째 초밥을 먹으면 만족감을 X_{i,j}만큼 얻을 수 있다. X_{i,j}가 음수일 수도 있다.
utilForever는 오늘 점심부터 T일 동안 식사를 하려 한다. 매일 점심 utilForever는 1번 칸에 있는 초밥 중 가장 위에 있는 초밥을 최대 하나 먹을 수 있다. 회전초밥 레일은 매일 밤 1칸씩 이동한다. i+1번 칸에 있던 초밥은 i번 칸으로 이동하고 1번 칸에 있던 초밥은 N번 칸으로 이동한다.
utilForever가 얻을 수 있는 만족감의 합의 최댓값을 구해 보자.
제한
- 1 \leq N,T \leq 10^6
- 0 \leq K_i \leq 10^6
- \sum_{i=1}^N K_i \leq 10^6
- -100 \leq X_{i,j} \leq 100
- 입력으로 주어지는 수는 모두 정수이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
N T
K_1 X_{1,1} X_{1,2} \dots X_{1,K_1}
K_2 X_{2,1} X_{2,2} \dots X_{2,K_2}
\vdots
K_N X_{N,1} X_{N,2} \dots X_{N,K_N}
출력
utilForever가 얻을 수 있는 만족감의 합의 최댓값을 출력한다.
입력 예 1
4 10 5 31 4 -15 9 26 3 53 -5 -89 3 -79 -32 -38 0
출력 예 1
88
表示言語
/ /配点 : 100 点
問題文
utilForeverがスシスシ回転寿司店に行きました.その店の回転寿司レールには,寿司を置くことができる位置が全部で N 個あります.初め,i 番目の位置には K_i 個の寿司が積まれており,i 番目の位置の上から j 番目の寿司を食べると満足度を X_{i,j} 得ることができます.X_{i,j}が負になることがあります.
utilForeverは今日の昼食から T 日間食事をしようとしています.毎日昼食に utilForeverは 1 番目の位置にある寿司のうち,一番上にある寿司を高々 1 個食べることができます.回転寿司レールは毎晩 1 個分移動します.i+1 番目の位置にあった寿司は i 番目の位置へ移動し,1 番目の位置にあった寿司は N 番目の位置へ移動します.
utilForeverが得ることができる満足度の合計の最大値を求めてください.
制約
- 1 \leq N,T \leq 10^6
- 0 \leq K_i \leq 10^6
- \sum_{i=1}^N K_i \leq 10^6
- -100 \leq X_{i,j} \leq 100
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
N T
K_1 X_{1,1} X_{1,2} \dots X_{1,K_1}
K_2 X_{2,1} X_{2,2} \dots X_{2,K_2}
\vdots
K_N X_{N,1} X_{N,2} \dots X_{N,K_N}
出力
utilForeverが得ることができる満足度の合計の最大値を出力せよ.
入力例 1
4 10 5 31 4 -15 9 26 3 53 -5 -89 3 -79 -32 -38 0
出力例 1
88
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
N students, numbered from 1 to N, are seated in a circle in numerical order. Each student wears a name tag marked with either O or X. Each student can see the name tags of N-1 students, excluding their own. No three or more students sitting next to each other have name tags with the same letter, and all students are aware of this fact.
The game continues until every student has correctly guessed the letter on their own name tag. The rules of the game are as follows:
- In each round, all students who are certain of the letter on their name tag raise their hands at the same time.
- Once all students have confirmed which students raised their hands in this round, the next round begins.
During the game, no student may exchange name tags with others, remove their name tag, or change the letter on their name tag.
You are given T test cases. For each test case, determine in which round each student will raise their hand for the first time.
Constraints
- 1 \le T \le 100\,000
- 3 \le N \le 100\,000
- S is a string of length N consisting only of
OandX.- The ith character of S is the character written on the name tag of the ith student.
- None of the three students sitting consecutively are wearing name tags with the same characters written on them.
- The sum of N over all test cases is at most 300\,000.
- All input numbers are integers.
Input
The input is given from Standard Input in the following format:
T case_1 case_2 \vdots case_T
Each test case is given in the following format:
N S
Output
Output N non-negative integers, separated by spaces, on a single line for each test case. The ith integer, r_i, indicates the r_ith round in which student i first raises their hand. If there is a student who cannot raise their hand no matter how long the game continues, output -1 instead.
Sample Input 1
4 4 XOXO 3 OOX 3 OXX 6 OXOOXX
Sample Output 1
1 1 1 1 2 2 1 1 2 2 1 1 2 1 1 2
In the first test case, four students are seated in a circle, each wearing a name tag labeled X, O, X, and O, respectively.
In the first round, Student 2 observes that both Student 1 and Student 3 are wearing name tags labeled X. If Student 2 were wearing a badge marked with X, then Students 2, 3, and 4 would all be wearing badges marked with X, which contradicts the rule that three students sitting consecutively cannot all have badges marked with the same character.
Therefore, Student 2 cannot be wearing a name tag marked with an X and can be certain that they are wearing a name tag marked with an O, so they raise their hand in the first round. The other students also raise their hands in the first round based on the same reasoning.
表示言語
/ /점수 : 100 점
문제
1번부터 N번까지 N명의 학생이 번호 순으로 원형으로 둘러앉아 있다. 각 학생은 O 또는 X가 적힌 명찰을 달고 있다. 각 학생은 자신의 명찰을 제외한 N-1명의 학생의 명찰을 볼 수 있다. 같은 문자가 적힌 명찰을 달고 있는 학생이 셋 이상 연속해서 앉아 있지 않으며 모든 학생은 이 사실을 알고 있다.
모든 학생이 자신의 명찰에 적힌 문자를 맞힐 때까지 게임을 진행한다. 게임의 규칙은 다음과 같다.
- 매 라운드마다 자신의 명찰에 적힌 문자를 확신할 수 있는 모든 학생이 동시에 거수한다.
- 이번 라운드에 어느 학생들이 거수했는지 모든 학생이 확인한 뒤 다음 라운드를 시작한다.
게임을 진행하는 동안 모든 학생은 명찰을 서로 교환하거나 명찰을 떼거나 명찰에 적힌 글자를 바꿀 수 없다.
T개의 테스트 케이스가 주어진다. 각 테스트 케이스마다 각 학생이 몇 번째 라운드에 처음으로 거수할지 알아내 보자.
제한
- 1 \le T \le 100\,000
- 3 \le N \le 100\,000
- S는
O와X로만 이루어진 길이 N의 문자열이다.- S의 i번째 문자는 i번 학생의 명찰에 적힌 문자이다.
- 연속해 앉은 어느 세 학생도 같은 문자가 적힌 명찰을 달고 있지 않다.
- 모든 테스트 케이스에 주어지는 N의 합은 300\,000을 넘지 않는다.
- 입력으로 주어지는 수는 모두 정수이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
T case_1 case_2 \vdots case_T
각 테스트 케이스는 다음 형식으로 주어진다.
N S
출력
테스트 케이스마다 N개의 음이 아닌 정수를 공백으로 구분하여 출력한다. i번째 정수 r_i는 i번 학생이 r_i번째 라운드에 처음으로 거수함을 의미한다. 만약 게임을 영원히 진행해도 거수할 수 없는 학생이 있다면 대신 -1을 출력한다.
입력 예 1
4 4 XOXO 3 OOX 3 OXX 6 OXOOXX
출력 예 1
1 1 1 1 2 2 1 1 2 2 1 1 2 1 1 2
첫 번째 테스트 케이스에서는 네 명의 학생이 각각 X, O, X, O가 적힌 명찰을 달고 둘러앉아 있다.
첫 번째 라운드에 2번 학생은 1번 학생과 3번 학생이 모두 X가 적힌 명찰을 달고 있는 걸 확인한다. 이때 2번 학생이 X가 적힌 명찰을 달고 있다면 2번, 3번, 4번 학생이 모두 X가 적힌 명찰을 달고 있으니 연속해 앉은 세 학생이 같은 문자가 적힌 명찰을 달고 있지 않다는 정보와 맞지 않는다.
이로부터 2번 학생은 자신이 X가 적힌 명찰을 달고 있을 수 없고, 따라서 O가 적힌 명찰을 달고 있다고 확신할 수 있으므로 첫 번째 라운드에 거수한다. 다른 학생들도 같은 근거로 모두 첫 번째 라운드에 거수한다.
表示言語
/ /配点 : 100 点
問題文
1番からN番までのN人の生徒が、番号順に円形に座っている。各生徒は、OまたはXと書かれた名札を付けている。各生徒は、自分の名札を除くN-1人の生徒の名札を見ることができる。同じ文字が書かれた名札をつけた生徒が3人以上連続して座っていることはなく、すべての生徒はこの事実を知っている。
すべての生徒が自分の名札に書かれた文字を当てるまでゲームを進める。ゲームのルールは以下の通りである。
- 各ラウンドごとに、自分の名札に書かれた文字に確信が持てる生徒全員が同時に手を上げる。
- 今回のラウンドでどの生徒が挙手したかを全員が確認した後次のラウンドを始める。
ゲームの進行中、すべての生徒は名札を互いに交換したり、名札を外したり、名札に書かれた文字を変更したりすることはできない。
T個のテストケースが与えられる。各テストケースにおいて、各生徒が何番目のラウンドで初めて手を上げるかを求めよ。
制約
- 1 \le T \le 100\,000
- 3 \le N \le 100\,000
- Sは
OとXのみで構成される長さNの文字列である- Sのi番目の文字は、i番目の生徒の名札に書かれた文字である
- どの並んで座っている3人の学生も同じ文字が書かれた名札をつけていない
- すべてのテストケースで与えられるNの合計は300\,000を超えない
- 入力される数値はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
T case_1 case_2 \vdots case_T
各テストケースは以下の形式で与えられる。
N S
出力
N個の非負の整数をスペースで区切り、テストケースごとに1行に出力する。そのうちi番目の整数r_iは、i番目の生徒がr_i番目のラウンドで初めて挙手することを意味する。もしゲームをいつまでも続けても挙手できない生徒がいるなら、代わりに -1 を出力する。
入力例 1
4 4 XOXO 3 OOX 3 OXX 6 OXOOXX
出力例 1
1 1 1 1 2 2 1 1 2 2 1 1 2 1 1 2
最初のテストケースでは、4人の生徒がそれぞれX、O、X、Oと書かれた名札をつけて円になって座っている。
第1ラウンドで、2番の生徒は1番の生徒と3番の生徒がともにXと書かれた名札をつけていることを確認する。このとき、2番の学生がXと書かれた名札をつけているとすると、2番、3番、4番の学生が全員Xと書かれた名札をつけていることになり、隣り合って座っている3人の学生が同じ文字が書かれた名札をつけていないという情報と矛盾する。
したがって、2番の生徒は自分がXと書かれた名札をつけていることはあり得ず、したがってOと書かれた名札をつけていると確信できるため、第1ラウンドで挙手する。他の生徒たちも同様の根拠から、全員第1ラウンドで挙手する。
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
As you know, SQL stands for "Sorohue is a Query Lover".
Q queries are given.
- x: If x < 0, print the input of the |x|–th query; if x > 0, print the output of the |x|–th query. (1 \le |x| \le Q)
After all queries are given, answer all queries in order.
Constraints
- 1 \le Q \le 500\,000
- 1 \le |x_i| \le Q
- All input values are integers.
Input
The input is given from Standard Input in the following format:
Q x_1 x_2 \dots x_Q
Output
Output Q integers separated by a blank on a single line. The i–th integer is the answer to the i–th query.
The answer to each query must be an integer whose absolute value is between 1 and Q, inclusive.
If there are multiple valid answers, output any one of them. There always exists a way to satisfy the conditions and correctly answer all queries.
Sample Input 1
6 -2 -3 -1 1 2 6
Sample Output 1
-3 -1 -2 -3 -1 4
Query 1 outputs -3, which is the input for Query 2, so it is correct.
Query 4 outputs -3, which is the answer to Query 1, so it is correct.
Query 6 outputs 4, which is the answer to Query 6, so it is correct.
表示言語
/ /점수 : 100 점
문제
여러분도 다들 알다시피 SQL은 "Sorohue는 Query를 Love해"의 준말이다.
다음과 같은 쿼리가 Q개 주어진다.
- x: x < 0이라면 |x|번째 쿼리의 입력, x > 0이라면 |x|번째 쿼리의 출력을 출력한다. (1 \le |x| \le Q)
쿼리가 모두 주어지면 각 쿼리에 순서대로 답해보자.
제한
- 1 \le Q \le 500\,000
- 1 \le |x_i| \le Q
- 입력으로 주어지는 수는 모두 정수이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
Q x_1 x_2 \dots x_Q
출력
Q개의 정수를 공백으로 구분하여 출력한다. i번째 정수는 i번째 쿼리의 답이다.
모든 쿼리에 대한 답은 절댓값이 1 이상 Q 이하인 정수여야 한다.
가능한 답이 여러 가지라면 그중 아무거나 출력한다. 조건을 만족하면서 모든 쿼리에 올바르게 답하는 방법이 항상 존재한다.
입력 예 1
6 -2 -3 -1 1 2 6
출력 예 1
-3 -1 -2 -3 -1 4
1번 쿼리에는 2번 쿼리의 입력인 -3을 출력했으므로 올바른 답이다.
4번 쿼리에는 1번 쿼리의 답인 -3을 출력했으므로 올바른 답이다.
6번 쿼리에는 6번 쿼리의 답인 4를 출력했으므로 올바른 답이다.
表示言語
/ /配点 : 100 点
問題文
皆さんご存知の通り、SQLは「SorohueはQueryをLoveする」の略語です。
次のようなクエリがQ個与えられる。
- x: x < 0 であれば |x|番目のクエリの入力、x > 0 であれば |x|番目のクエリの出力を出力する。(1 \le |x| \le Q)
すべてのクエリが与えられたら、各クエリに対して順番に答えを出してみよう。
制約
- 1 \le Q \le 500\,000
- 1 \le |x_i| \le Q
- 入力される値はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
Q x_1 x_2 \dots x_Q
出力
Q個の整数をスペースで区切って1行に出力する。そのうちi番目の整数は、i番目のクエリに対する答えである。
すべてのクエリに対する答えは、絶対値が1以上Q以下の整数でなければならない。
答えが複数ある場合は、その中からどれか一つを出力する。条件を満たしつつ、すべてのクエリに正しく答える方法は常に存在する。
入力例 1
6 -2 -3 -1 1 2 6
出力例 1
-3 -1 -2 -3 -1 4
1番目のクエリには、2番目のクエリの入力である -3 を出力したため、正しい答えである。
4番目のクエリには、1番目のクエリの答えである -3 を出力したため、正しい答えである。
6番目のクエリには、6番目のクエリの答えである 4 を出力したため、正しい答えである。
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
This year, FuriosaAI officially announced mass production of RNGD, its second-generation AI accelerator. RNGD is specialized for processing language models and multimodal models, and provides powerful computing performance even with low power consumption.
At SCSC, AI agents Lulu and Terra were created using RNGD chips, and SCSC had them play the SCSC game for performance testing.
The SCSC game is played with a string S consisting of uppercase letters S and C that does not contain SCSC as a substring.
Lulu and Terra take turns, with Terra going first. On each turn, the current player chooses one character from the string and removes it.
If, after the removal, the string contains SCSC as a substring, that player wins and the other player loses.
If the current player can no longer choose any character to remove, that player loses and the other player wins.
Thanks to the powerful computing performance of the RNGD chips, Lulu and Terra have become able to always find optimal moves to win. Given the string S, determine which agent wins the game if both Lulu and Terra play optimally.
What is a substring?
A substring of a string is a contiguous part of the original string. For example, `bc` is a substring of `abcd`, but `ac` is not. Multiple substrings may overlap within the same string. For example, `aba` appears a total of 2 times in `ababa`.Constraints
- 1 \leq T \leq 10\,000
- 1 \leq |S| \leq 200\,000
- S consists only of uppercase letters
SandC, and does not containSCSCas a substring. - The sum of |S| over all test cases does not exceed 200\,000.
Input
The input is given from Standard Input in the following format:
T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T
Each test case is given in the following format:
S
Output
For each test case, output Terra if Terra wins, and Lulu if Lulu wins, one per line.
Sample Input 1
2 SCSSCCS SSSS
Sample Output 1
Terra Lulu
表示言語
/ /Score : 100 points
문제
FuriosaAI는 올해 공식적으로 2세대 AI 가속기 RNGD의 대량 생산을 발표했다. RNGD는 언어 모델 및 멀티모달 모델 처리에 특화된 제품으로, 적은 전력으로도 강력한 연산 성능을 제공한다.
SCSC에서는 RNGD 칩을 이용해 AI 에이전트 루루와 테라를 제작하고 성능 테스트를 위해 SCSC 게임을 플레이하도록 했다.
SCSC 게임은 알파벳 대문자 S와 C로 이루어진 문자열 중 SCSC를 부분문자열로 가지지 않는 문자열 S를 가지고 진행하는 게임이다.
루루와 테라는 테라부터 시작해 번갈아 가며 S의 문자 하나를 선택해 제거한다.
제거한 뒤 S가 SCSC를 부분문자열로 가지면 해당 에이전트가 승리하고 상대방이 패배한다.
만약 더 이상 문자를 선택해 제거할 수 없으면 해당 에이전트가 패배하고 상대방이 승리한다.
RNGD 칩의 강력한 연산 성능으로 루루와 테라는 항상 이기기 위한 최선의 행동을 찾아낼 수 있게 되었다. 문자열 S가 주어질 때 루루와 테라가 모두 최선의 행동을 하면 어느 에이전트가 게임에서 승리할지 구해 보자.
부분문자열이란
어떤 문자열의 부분문자열은 원래 문자열의 연속된 일부이다. 예를 들어 문자열 `abcd`에서 `bc`는 부분문자열이지만, `ac`는 부분문자열이 아니다. 같은 문자열 안에서 여러 부분문자열이 서로 겹쳐서 등장할 수도 있다. 예를 들어 문자열 `ababa`에서 `aba`는 총 2회 등장한다.제한
- 1 \leq T \leq 10\,000
- 1 \leq |S| \leq 200\,000
- S는 대문자
S와C로만 이루어져 있으며,SCSC를 부분문자열로 가지지 않는다. - 모든 테스트 케이스의 |S|의 합은 200\,000을 넘지 않는다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T
각 테스트 케이스는 다음 형식으로 주어진다.
S
출력
각 테스트 케이스마다 테라가 이기면 Terra, 루루가 이기면 Lulu를 한 줄에 하나씩 출력한다.
입력 예 1
2 SCSSCCS SSSS
출력 예 1
Terra Lulu
表示言語
/ /配点 : 100 点
問題文
FuriosaAI は今年,第 2 世代 AI アクセラレータである RNGD の大量生産を正式に発表した.RNGD は言語モデルおよびマルチモーダルモデルの処理に特化した製品であり,少ない電力でも強力な演算性能を提供する.
SCSC では RNGD チップを用いて AI エージェントのルルとテラを作成し,性能テストのために SCSC ゲームをプレイさせた.
SCSC ゲームは,英大文字 S と C からなる文字列のうち,SCSC を部分文字列として含まない文字列 S を用いて行うゲームである.
ルルとテラはテラを先手として,交互に文字列の文字を 1 つ選んで削除する.
削除した後,文字列が SCSC を部分文字列として含むなら,そのプレイヤーが勝利し,相手が敗北する.
もしこれ以上文字を選んで削除できなければ,そのプレイヤーが敗北し,相手が勝利する.
RNGD チップの強力な演算性能により,ルルとテラは常に勝つための最善の行動を見つけられるようになった. 文字列 S が与えられたとき,ルルとテラがともに最善の行動をとるなら,どちらのエージェントがゲームに勝利するか求めよ.
部分文字列とは
ある文字列の 部分文字列 とは,元の文字列の連続した一部分である.例えば,文字列 `abcd` において `bc` は部分文字列であるが,`ac` は部分文字列ではない. 同じ文字列の中で,複数の部分文字列が互いに重なって現れることもある.例えば,文字列 `ababa` において `aba` は合計 2 回現れる.制約
- 1 \leq T \leq 10\,000
- 1 \leq |S| \leq 200\,000
- S は英大文字
SとCのみからなり,SCSCを部分文字列として含まない. - すべてのテストケースにおける |S| の総和は 200\,000 を超えない.
入力
入力は以下の形式で標準入力から与えられる.
T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T
各テストケースは次の形式で与えられる.
S
出力
各テストケースについて,テラが勝つなら Terra,ルルが勝つなら Lulu を 1 行に出力せよ.
入力例 1
2 SCSSCCS SSSS
出力例 1
Terra Lulu
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
An exam is approaching! queued_q has T hours left until the exam, and the exam covers N topics. Studying each topic basically takes A hours. queued_q wants to study as many topics as possible while keeping the total study time at most T.
Some topics are related to one another. If queued_q has previously studied topics related to the topic to be studied next, that topic becomes easier to study. The relationships between exam topics can be represented as a tree with N vertices and N-1 edges. The i-th edge of the tree means that topic u_i and topic v_i are directly related to each other. When studying topic i, if k topics adjacent to i have already been studied, the actual time required to study topic i is \max(1, A - B \times k). In other words, each additional adjacent topic already studied decreases the study time by B, but at least 1 hour must be spent.
queued_q wants to choose the topics to study and their order appropriately so as to study as many topics as possible. Find the maximum number of topics K that queued_q can study within T hours, the minimum time M required to study K topics, and an order that achieves them.
Constraints
- 1 \leq N \leq 200\,000
- 0 \leq T \leq 10^9
- 1 \leq A \leq 10^9
- 0 \leq B \leq A
- 1 \leq u_i < v_i \leq N
- The given relationships always form a tree.
- All given numbers are integers.
Input
The input is given from Standard Input in the following format:
N T A B
u_1 v_1
u_2 v_2
\vdots
u_{N-1} v_{N-1}
Output
On the first line, output the maximum number of topics K that queued_q can study and the minimum time M required to study K topics, separated by a space.
On the second line, output an optimal order for studying K topics, separated by spaces. If there are multiple optimal orders, output any one of them. If K=0, note that the second line should be empty.
Sample Input 1
2 1 1 0 1 2
Sample Output 1
1 1 1
Sample Input 2
4 0 1 1 1 2 1 3 1 4
Sample Output 2
0 0
表示言語
/ /Score : 100 points
문제
시험이 다가오고 있다! 동규는 시험까지 남은 T시간 동안 N개의 주제를 공부해야 한다. 각 주제를 공부하는 데에는 A시간이 걸린다. 동규는 시험을 대비하기 위해 소요한 공부 시간의 총합이 T 이하가 되도록 하면서 최대한 많은 주제를 공부하려고 한다.
어떤 주제는 서로 연관되어 있어 이전에 공부했던 주제와 연관된 주제를 공부하면 그 주제를 공부하기가 더 쉬워진다. 시험 주제 간의 연관 관계는 N개의 정점과 N-1개의 간선을 가진 트리 구조로 나타낼 수 있다. 트리의 i번째 간선은 주제 u_i와 주제 v_i가 서로 직접 연관되어 있음을 의미한다. 주제 i를 공부할 때 i와 인접한 주제 중 k개의 주제를 공부했다면 주제 i를 공부하는 데 걸리는 실제 시간은 \max(1, A - Bk)가 된다. 다시 말하면 이미 공부한 연관 주제가 하나 늘어날 때마다 공부 시간이 B만큼 감소하지만 적어도 1시간은 공부해야 한다.
동규는 최적의 순서로 공부하여 시험을 완벽하게 대비하고자 한다. 동규가 T시간 동안 공부할 수 있는 주제 수의 최댓값과 그 방법을 구해 보자.
제한
- 1 \leq N \leq 200\,000
- 0 \leq T \leq 10^9
- 1 \leq A \leq 10^9
- 0 \leq B \leq A
- 1 \leq u_i < v_i \leq N
- 주어지는 연관 관계는 트리 구조이다.
- 입력으로 주어지는 수는 모두 정수이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
N T A B
u_1 v_1
u_2 v_2
\vdots
u_{N-1} v_{N-1}
출력
첫째 줄에 동규가 공부할 수 있는 주제 수의 최댓값 K와 K개의 주제를 공부하는 데 걸리는 최소 시간 M을 공백으로 구분하여 출력한다.
둘째 줄에 K개의 주제를 공부하는 최적의 순서를 공백으로 구분하여 출력한다. 만약 가능한 최적의 순서가 여러 가지라면 그중 아무거나 하나를 출력한다. 공부할 수 있는 주제가 0개라면 둘째 줄은 아무것도 출력하지 않음에 유의해야 한다.
입력 예 1
2 1 1 0 1 2
출력 예 1
1 1 1
입력 예 2
4 0 1 1 1 2 1 3 1 4
출력 예 2
0 0
表示言語
/ /配点 : 100 点
問題文
試験が近づいている!queued_q には試験まで T 時間が残されており,試験範囲には N 個のトピックがある.各トピックを勉強するには,基本的に A 時間かかる.queued_q は費やした勉強時間の合計が T 以下になるようにしながら,できるだけ多くのトピックを勉強したい.
一部のトピックは互いに関連している.これから勉強しようとしているトピックに関連するトピックを以前に勉強していたなら,そのトピックは勉強しやすくなる.試験トピック間の関連関係は,N 個の頂点と N-1 本の辺を持つ木構造で表すことができる.木の i 番目の辺は,トピック u_i とトピック v_i が互いに直接関連していることを意味する.トピック i を勉強するとき,i に隣接するトピックのうち,すでに勉強したトピックが k 個あるなら,トピック i を勉強するのにかかる実際の時間は \max(1, A - B \times k) となる.言い換えると,すでに勉強した隣接トピックが 1 つ増えるたびに勉強時間は B だけ減少するが,少なくとも 1 時間は勉強しなければならない.
queued_q は勉強するトピックとその順序を適切に定め,できるだけ多くのトピックを勉強したい.queued_q が T 時間以内に勉強できるトピック数の最大値 K,K 個のトピックを勉強するのにかかる最小時間 M,およびそれらを達成する勉強順序を求めよ.
制約
- 1 \leq N \leq 200\,000
- 0 \leq T \leq 10^9
- 1 \leq A \leq 10^9
- 0 \leq B \leq A
- 1 \leq u_i < v_i \leq N
- 与えられる関連関係は常に木構造をなす.
- 入力される数値はすべて整数である.
入力
入力は以下の形式で標準入力から与えられる.
N T A B
u_1 v_1
u_2 v_2
\vdots
u_{N-1} v_{N-1}
出力
1 行目に,queued_q が勉強できるトピック数の最大値 K と,K 個のトピックを勉強するのにかかる最小時間 M を空白区切りで出力せよ.
2 行目に,K 個のトピックを勉強する最適な順序を空白区切りで出力せよ.最適な順序が複数ある場合は,そのうちどれを出力してもよい.勉強できるトピックが 0 個なら,2 行目には何も出力しないことに注意せよ.
入力例 1
2 1 1 0 1 2
出力例 1
1 1 1
入力例 2
4 0 1 1 1 2 1 3 1 4
出力例 2
0 0
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
A CUBRID HA cluster is a system consisting of N servers. The servers are numbered from 1 to N.
Jank has become the server administrator of SCSC and wants to choose some of the servers in the CUBRID HA cluster to use. Jank turns on the servers he chooses and turns off the servers he does not choose.
Jank, who rules SCSC, chooses whether each chosen server operates as a Master or as a Slave when turning it on. A Master server can process RW requests and RO requests, and a Slave server can process RO requests and SO requests. Each server can process at most one request at the same time.
If there is no Master server among the currently turned-on servers and at least one Slave server is currently turned on, the currently turned-on Slave server with the smallest number immediately becomes a Master server.
Jank, who rules SCSC, must process Q queries of the following two types in order.
1 i: Turn off server i. If it is already turned off, ignore this query.2 a b c: a RW requests, b RO requests, and c SO requests arrive simultaneously.
The requests that arrive in a type-2 query must all be processed using only the servers that are currently turned on. Each request must be assigned to a server that can process that request, and at most one request can be assigned to each server. A request that is not assigned when the query is given cannot be processed.
When all requests have been assigned, each server processes its assigned request and discards the processed request. A server with no remaining request becomes ready to process another request again.
Find the minimum number of servers Jank, who rules SCSC, must choose initially in order to process all requests. If it is impossible to process all requests by any method, output -1 instead.
Constraints
- 1 \leq N,Q \leq 2\,000
- 1 \leq i \leq N
- 0 \leq a,b,c \leq N
- There is at least one query of the second type.
- All input values are integers.
Input
The input is given from Standard Input in the following format:
N Q
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q
Each query is in one of the following two formats:
1 i
2 a b c
Output
Output the minimum number of servers Jank, who rules SCSC, must choose initially in order to process all requests. If it is impossible to process all requests by any method, output -1 instead.
Sample Input 1
3 4 2 2 0 0 1 1 2 0 0 1 2 1 0 1
Sample Output 1
3
表示言語
/ /Score : 100 points
문제
CUBRID HA 클러스터는 N개의 서버로 구성된 시스템이다. 서버는 1번부터 N번까지 번호가 붙어 있다.
SCSC의 서버 관리자로 취임한 Jank는 CUBRID HA 클러스터의 서버 중 몇 대를 선택해 사용하려고 한다. Jank는 선택한 서버를 켜고 선택하지 않은 서버를 끈다.
SCSC를 지배하는 Jank는 선택한 각 서버를 켤 때 Master 또는 Slave 중 하나를 선택해 작동시킨다. Master 서버는 RW 요청과 RO 요청을 처리할 수 있고, Slave 서버는 RO 요청과 SO 요청을 처리할 수 있다. 각 서버는 최대 한 개의 요청만 동시에 처리할 수 있다.
만약 현재 켜져 있는 서버 중 Master 서버가 하나도 없고 현재 켜져 있는 Slave 서버가 하나 이상 있다면, 그중 번호가 가장 작은 서버가 즉시 Master 서버가 된다.
SCSC를 지배하는 Jank는 아래 두 종류의 쿼리 Q개를 순서대로 처리해야 한다.
1 i: i번 서버를 끈다. 이미 꺼져 있는 서버라면 무시한다.2 a b c: RW 요청 a개, RO 요청 b개, SO 요청 c개가 동시에 들어온다.
2번 쿼리로 들어온 요청은 현재 켜져 있는 서버만 사용해 모두 처리해야 한다. 각 요청은 요청을 처리할 수 있는 서버에 배정되어야 하며, 하나의 서버에는 최대 한 개의 요청만 배정할 수 있다. 쿼리가 주어질 때 배정하지 못한 요청은 처리할 수 없다.
모든 요청이 배정되면 각 서버는 요청을 처리하고 처리한 요청을 버린다. 남은 요청이 없는 서버는 다시 다른 요청을 처리할 수 있는 상태가 된다.
SCSC를 지배하는 Jank가 모든 요청을 처리할 수 있도록 처음에 선택해야 하는 서버 수의 최솟값을 구하여라. 어떤 방법으로도 모든 요청을 처리할 수 없다면 대신 -1을 출력한다.
제한
- 1 \leq N,Q \leq 2\,000
- 1 \leq i \leq N
- 0 \leq a,b,c \leq N
- 2번 쿼리가 하나 이상 주어진다.
- 입력으로 주어지는 수는 모두 정수이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
N Q
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q
각 쿼리는 다음 두 형식 중 하나이다.
1 i
2 a b c
출력
SCSC를 지배하는 Jank가 모든 요청을 처리할 수 있도록 처음에 선택해야 하는 서버 수의 최솟값을 출력한다. 어떤 방법으로도 모든 요청을 처리할 수 없다면 대신 -1을 출력한다.
입력 예 1
3 4 2 2 0 0 1 1 2 0 0 1 2 1 0 1
출력 예 1
3
表示言語
/ /配点 : 100 点
問題文
CUBRID HA クラスタは N 台のサーバからなるシステムです.サーバには 1 番から N 番までの番号が付いています.
SCSC のサーバ管理者に就任した Jank は,CUBRID HA クラスタのサーバのうちいくつかを選んで使おうとしています.Jank は選んだサーバを起動し,選ばないサーバを停止します.
SCSC を支配する Jank は,選んだ各サーバを起動するとき,Master または Slave のどちらとして動作させるかを選びます.Master サーバは RW リクエストと RO リクエストを処理でき,Slave サーバは RO リクエストと SO リクエストを処理できます.各サーバは同時に高々 1 個のリクエストしか処理できません.
現在起動しているサーバの中に Master サーバが 1 台も存在せず,現在起動している Slave サーバが 1 台以上存在する場合,現在起動している Slave サーバのうち番号が最も小さいサーバがただちに Master サーバになります.
SCSC を支配する Jank は,以下の 2 種類のクエリを Q 個,順に処理しなければなりません.
1 i: サーバ i を停止する.すでに停止しているサーバなら無視する.2 a b c: RW リクエスト a 個,RO リクエスト b 個,SO リクエスト c 個が同時に到着する.
2 番目の形式のクエリで到着したリクエストは,現在起動しているサーバだけを使ってすべて処理しなければなりません.各リクエストは,そのリクエストを処理できるサーバに割り当てる必要があり,1 台のサーバには高々 1 個のリクエストしか割り当てられません.クエリが与えられた時点で割り当てられなかったリクエストは処理できません.
すべてのリクエストが割り当てられると,各サーバはリクエストを処理し,処理したリクエストを破棄します.残っているリクエストがないサーバは,再び他のリクエストを処理できる状態になります.
SCSC を支配する Jank がすべてのリクエストを処理するためには,最初に選ぶ必要があるサーバの最小個数を求めてください.どのような方法でもすべてのリクエストを処理できない場合は,代わりに -1 を出力してください.
制約
- 1 \leq N,Q \leq 2\,000
- 1 \leq i \leq N
- 0 \leq a,b,c \leq N
- 2 番目の形式のクエリが少なくとも 1 個与えられる
- 入力される数値はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
N Q
\mathrm{query}_1
\mathrm{query}_2
\vdots
\mathrm{query}_Q
各クエリは以下の 2 種類のいずれかの形式で与えられる.
1 i
2 a b c
出力
SCSC を支配する Jank がすべてのリクエストを処理するために最初に選ぶ必要があるサーバの最小個数を出力せよ.どのような方法でもすべてのリクエストを処理できない場合は,代わりに -1 を出力せよ.
入力例 1
3 4 2 2 0 0 1 1 2 0 0 1 2 1 0 1
出力例 1
3
Time Limit: 2 sec / Memory Limit: 1024 MiB
表示言語
/ /Score : 100 points
Problem Statement
ChannelTalk, an all-in-one AI messenger that facilitates real-time communication with customers, offers a workflow feature that allows anyone to easily create chatbots. Using ChannelTalk Workflow, you can combine triggers and actions like building blocks based on the customer and the situation to automate the entire process from the start to the end of a consultation. Additionally, frequently used functions can be created as modules and reused multiple times.
Ino intends to build a chatbot using ChannelTalk Workflow to handle N different types of questions. Each question is assigned a unique number from 1 to N.
Ino wants to add M modules to the workflow and number them from 0 to M-1 in the order they are added. Since Ino cannot manage too many modules, at most 2\,048 modules can be used.
When question x is entered, module i operates as follows.
- If x = i, it answers the question and ends the consultation.
- If x \neq i, it enters question x to module L_i if x \le F_i, and module G_i if x \gt F_i.
When a question is received, it is first input to module 0, and executing each module takes 1 second. That is, the time taken to process question i is equal to the total number of modules passed through, including module 0 and module i, until the consultation ends. If the same module is passed through multiple times, it is counted as many times as it was passed through.
Ino wants to ensure that the consultation ends in exactly K seconds regardless of which question from 1 to N is asked. Given the number of question types N and the ending time K, choose the number of modules M and the values of F_i, L_i, and G_i for each module so that the consultation always ends exactly at K seconds using at most 2\,048 modules. Note that M does not need to be minimized.
Constraints
- 2 \le K \le N \le 1\,000
- All input values are integers.
Input
The input is given from Standard Input in the following format:
N K
Output
On the first line, output the number of modules M to use. (1 \le M \le 2\,048)
From the second line, output M lines. On the (i+2)-th line, output three integers F_i, L_i, and G_i representing module i, separated by spaces. (0 \le F_i \le N;\ 0 \le L_i, G_i < M)
If no solution exists, output -1 instead.
Sample Input 1
6 6
Sample Output 1
11 1 7 1 2 7 2 3 7 3 4 7 4 5 5 6 4 0 0 5 0 0 3 8 4 2 9 3 1 10 2 0 0 1
表示言語
/ /점수 : 100 점
문제
고객과의 실시간 소통을 편리하게 해주는 올인원 AI 메신저 채널톡은 누구나 쉽게 챗봇을 만들 수 있도록 워크플로우 기능을 제공한다. 채널톡 워크플로우를 이용해 고객과 상황에 따라 필요한 트리거와 액션을 블록처럼 조합해 상담 시작부터 끝까지 전 과정을 자동화할 수 있다. 또한 반복적으로 필요한 기능은 모듈로 만들어 여러 번 재활용할 수도 있다.
이노는 채널톡 워크플로우를 이용해 N종류의 서로 다른 질문을 처리하는 챗봇을 제작하려 한다. 각 질문에는 1번부터 N번까지의 서로 다른 번호가 매겨져 있다.
이노는 워크플로우에 M개의 모듈을 추가하고 추가한 순서대로 0번부터 M-1번까지 번호를 매기고자 한다. 이노는 너무 많은 모듈을 관리할 능력이 없기 때문에 최대 2\,048개의 모듈만 사용할 수 있다.
i번 모듈은 x번 질문이 입력되었을 때 다음과 같이 작동한다.
- x = i인 경우 해당 질문에 답변한 뒤 상담을 종료한다.
- x \neq i인 경우 x \le F_i면 L_i번 모듈, x \gt F_i면 G_i번 모듈에 x번 질문을 입력한다.
질문이 들어오면 처음에 0번 모듈에 입력되며, 각 모듈을 실행하는 데에는 1초가 걸린다. 즉, i번 질문을 처리하는 데 걸리는 시간은 0번 모듈과 i번 모듈을 포함해 상담을 종료할 때까지 거쳐간 모듈의 총 개수와 같다. 같은 모듈을 여러 번 거쳐간 경우 거쳐간 횟수만큼 중복해 센다.
이노는 1번부터 N번까지 중 어느 질문을 해도 정확히 K초만에 상담이 종료되도록 만들고자 한다. 질문의 종류 N과 종료 시간 K가 주어질 때 모듈의 수 M과 각 모듈의 F_i, L_i, G_i를 적절히 정해 2\,048개 이하의 모듈로 항상 정확히 K초만에 상담이 끝나도록 만들어 보자. M을 최소화할 필요는 없음에 유의하라.
제한
- 2 \le K \le N \le 1\,000
- 입력으로 주어지는 수는 모두 정수이다.
입력
입력은 다음 형식으로 표준 입력으로 주어진다.
N K
출력
첫 번째 줄에 사용할 모듈의 수 M을 출력한다. (1 \le M \le 2\,048)
두 번째 줄부터 M개의 줄에 걸쳐, i+2번째 줄에 i번 모듈의 규칙을 나타내는 세 정수 F_i, L_i, G_i를 공백으로 구분하여 출력한다. (0 \le F_i \le N;\ 0 \le L_i, G_i < M)
가능한 방법이 존재하지 않는 경우 대신 -1을 출력한다.
입력 예 1
6 6
출력 예 1
11 1 7 1 2 7 2 3 7 3 4 7 4 5 5 6 4 0 0 5 0 0 3 8 4 2 9 3 1 10 2 0 0 1
表示言語
/ /配点 : 100 点
問題文
顧客とのリアルタイムなコミュニケーションを便利にするオールインワン AI メッセンジャー ChannelTalk は,誰でも簡単にチャットボットを作れるようにワークフロー機能を提供している.ChannelTalk Workflow を利用すると,顧客や状況に応じて必要なトリガーとアクションをブロックのように組み合わせ,相談の開始から終了までの全過程を自動化できる.また,繰り返し必要な機能はモジュールとして作り,何度も再利用できる.
イノは ChannelTalk Workflow を利用して,N 種類の互いに異なる質問を処理するチャットボットを作ろうとしている.各質問には 1 番から N 番までの互いに異なる番号が付いている.
イノはワークフローに M 個のモジュールを追加し,追加した順に 0 番から M-1 番までの番号を付けたいと考えている.イノはあまり多くのモジュールを管理する能力がないため,最大 2\,048 個のモジュールしか使用できない.
i 番モジュールは x 番質問が入力されたとき次のように動作する.
- x = i の場合,その質問に回答した後,相談を終了する.
- x \neq i の場合,x \le F_i なら L_i 番モジュールに,x \gt F_i なら G_i 番モジュールに x 番質問を入力する.
質問が入力されると,最初に 0 番モジュールに入力され,各モジュールの実行には 1 秒かかる.すなわち,i 番の質問を処理するのにかかる時間は,0 番モジュールと i 番モジュールを含め,相談が終了するまでに通過したモジュールの総数に等しい.同じモジュールを複数回通過した場合は,通過した回数だけ重複して数える.
イノは,1 番から N 番までのどの質問が来ても,相談が 正確に K 秒で終了するようにしたい.質問の種類 N と終了時間 K が与えられるので,モジュールの数 M と各モジュールの F_i, L_i, G_i を適切に定め,2\,048 個以下のモジュールで常に正確に K 秒で相談が終わるようにしよう.M を最小化する必要はない.
制約
- 2 \le K \le N \le 1\,000
- 入力される数値はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
N K
出力
1行目に使用するモジュール数 M を出力する.(1 \le M \le 2\,048)
2行目から M 行にわたり,i+2 行目に i 番モジュールを表す 3 つの整数 F_i, L_i, G_i を空白区切りで出力する.(0 \le F_i \le N;\ 0 \le L_i, G_i < M)
可能な方法が存在しない場合は,代わりに -1 を出力する.
入力例 1
6 6
出力例 1
11 1 7 1 2 7 2 3 7 3 4 7 4 5 5 6 4 0 0 5 0 0 3 8 4 2 9 3 1 10 2 0 0 1