Skip to content

1306: 新循环输入

题目

题目描述

布莱克最近又多学了些使用循环检测输入,但他还是太迷糊了,解决不了下面这道题目。于是布莱克请你帮助他,写一段代码来解决他遇到的问题:

初始时,你将会得到一串长度为 $n$ 的数组A。接下来的若干行输入为对该数组的操作。下标从 0 开始。

输入格式如下:

1 x 代表询问操作,输出为数组A中下标为 x​ 的值。

2 k x_1 y_1 x_2 y_2 ...... x_k y_k 代表修改操作,k​ 代表接下来输入的 xy 对的个数;每对 xy 表示将数组A中下标为 x 的值改为 y

3 x_1 y_1 ...... 代表不定长修改操作 ,x​y 的含义同操作 2,但 xy 对个数不定。

但这一次,布莱克将无法保证输入合法,即一些整数可能会被替换成字符(保证为一个可见字符,ASCII 码在 (32, 127) 范围中且不含字符0~9);此外对于 2 操作与 3 操作,整数的输入可能会多输入一个;

  • 布莱克好心地提醒你,你可能需要 getchar() , getline() , eof() 等函数的帮助。

以上提及的两种是本题的所有“输入非法”的情况。也就是说,仍然保证:如果输入并未被替换成字符,那么输入都为 int 范围内的整数,不发生越界的情况,如2操作中的 k 可能为合法的正整数或者字符。

输入格式

第一行输入 n​ ,表示数组A的长度。

第二行有 n​ 个数,对应数组A的元素。

接下来输入若干行,对应不同操作。

输出格式

对于 1 操作,输出数组中下标为 x​ 的值。

保证操作数不会变为字符。

若检测到字符,则输出 Bad,且该次操作无效 。

2 操作与 3 操作检测到输入整数会多输入一个,则输出 Fail ,且该次操作无效。

保证 BadFail 的情况不会同时出现。

样例输入

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

对于所有数据,操作23xy 对个数不会超过 20 对。

Oops! 本题目还没有解答!

助教老师们编题的速度,已经超过了解题的速度!

OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。

如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!