#P16813. [NWRRC 2024资格赛]Count the Operations
[NWRRC 2024资格赛]Count the Operations
题目描述
课堂上,Ania 编写了一个程序,对从 到 的所有整数执行某项工作:
for (int i = 0; i < n; i++) {
work (i);
}
老师 Petia 看过程序后指出,由于 的最大值可达 ,程序运行时间会太长。
于是 Ania 决定只对一部分整数执行工作。她的新程序如下:
for (int i = 0; i < n; i++) {
if (i == x_1) i = y_1;
if (i == x_2) i = y_2;
...
if (i == x_k) i = y_k;
work (i);
}
给定 和这段程序,求程序总共执行多少次操作,并判断它是否能够终止。
本题计数的操作包括:
- 赋值操作:
i = 0、i++、i = y_1等; - 比较操作:
i < n、i == x_1等; - 调用
work (i)本身。
每次上述操作均计为一次操作。
输入格式
输入是一段由 Ania 编写的程序,其格式与样例完全一致。特别地:
for所在行同时包含左花括号;- 每个左圆括号前均有一个空格;
- 缩进恰好为四个空格;
- 每行行末没有多余空格;
- 所有
if语句之后恰好出现一次work语句。
数据范围
设条件语句的数量为 ,则
所有数值满足
除此之外, 可以任意取值,且不同条件语句可以包含相同的数值。
输出格式
输出程序执行的操作总数。
如果程序永远无法终止,输出 -1。
样例 1
for (int i = 0; i < 3; i++) {
work (i);
}
11
对应的操作依次为:
i = 0; 0 < 3; work (0);
i++; 1 < 3; work (1);
i++; 2 < 3; work (2);
i++; 3 < 3.
样例 2
for (int i = 0; i < 5; i++) {
if (i == 3) i = 1;
if (i == 1) i = 3;
if (i == 3) i = 4;
work (i);
}
16
对应的操作依次为:
i = 0; 0 < 5; 0 == 3;
0 == 1; 0 == 3; work (0);
i++; 1 < 5; 1 == 3;
1 == 1; i = 3; 3 == 3;
i = 4; work (4); i++;
5 < 5.