1306: 新循环输入
题目
题目描述
布莱克最近又多学了些使用循环检测输入,但他还是太迷糊了,解决不了下面这道题目。于是布莱克请你帮助他,写一段代码来解决他遇到的问题:
初始时,你将会得到一串长度为 $n$ 的数组A。接下来的若干行输入为对该数组的操作。下标从 0 开始。
输入格式如下:
1 x
代表询问操作,输出为数组A中下标为 x 的值。
2 k x_1 y_1 x_2 y_2 ...... x_k y_k
代表修改操作,k 代表接下来输入的 x ,y 对的个数;每对 x ,y 表示将数组A中下标为 x 的值改为 y 。
3 x_1 y_1 ......
代表不定长修改操作 ,x ,y 的含义同操作 2,但 x ,y 对个数不定。
但这一次,布莱克将无法保证输入合法,即一些整数可能会被替换成字符(保证为一个可见字符,ASCII 码在 (32, 127)
范围中且不含字符0~9);此外对于 2
操作与 3
操作,整数的输入可能会多输入一个;
- 布莱克好心地提醒你,你可能需要
getchar() , getline() , eof()
等函数的帮助。
以上提及的两种是本题的所有“输入非法”的情况。也就是说,仍然保证:如果输入并未被替换成字符,那么输入都为 int
范围内的整数,不发生越界的情况,如2操作中的 k
可能为合法的正整数或者字符。
输入格式
第一行输入 n ,表示数组A的长度。
第二行有 n 个数,对应数组A的元素。
接下来输入若干行,对应不同操作。
输出格式
对于 1
操作,输出数组中下标为 x 的值。
保证操作数不会变为字符。
若检测到字符,则输出 Bad
,且该次操作无效 。
若 2
操作与 3
操作检测到输入整数会多输入一个,则输出 Fail
,且该次操作无效。
保证 Bad
与 Fail
的情况不会同时出现。
样例输入
5
1 2 3 4 5
1 2
2 2 2 4 3 1
1 c
3 2 3
1 2
3 2 3 4
样例输出
3
Bad
3
Fail
数据范围
对于 40% 的数据 n<=100 且操作数小于等于 1000 。
对于另外 60% 的数据 n<=10000 且操作数小于等于 20000 。
对于所有数据,操作2 ,3 的 x,y 对个数不会超过 20 对。
Oops! 本题目还没有解答!
助教老师们编题的速度,已经超过了解题的速度!
OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。
如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!