#JLT10A. 2026年J组模拟赛10连测第10场-T1 程老师的读码器

2026年J组模拟赛10连测第10场-T1 程老师的读码器

项目 说明
文件名 code
输入文件 code.in
输出文件 code.out
时间限制 1000 ms
内存限制 512 MB
测试点数目 20(等分)

题目描述

程老师上课有个习惯:讲评的时候不直接报结论,而是把一段代码投到屏幕上,让学生自己念出它的结果。这一回他投出的是自己写的一个小玩意,他管它叫读码器。读码器只做一件事——把一串整数从头到尾走一遍,按自己的规矩挑出其中一些做加减,走完之后报出一个数。程老师要学生回答的不是"这段代码写得对不对",而是"喂给它一组数,它会报出什么"。

读码器的全部内容如下。cin、cout、vector 都是 C++ 标准库里现成的东西,a[i] 表示数列中位置为 i 的那一项:

int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
int s = 0, i = 0;
while (i < n) {
    if (a[i] % 2 == 0) { i += 2; continue; }   // 偶数:一次跳两格
    if (i % 2 == 1) s -= a[i];                 // 下标为奇:减
    else s += a[i];                            // 下标为偶:加
    i++;
}
cout << s << "\n";

数列里一共有 nn 项,位置编号从 00 起,即第一项的位置是 00,最后一项的位置是 n−1n-1。读码器从位置 00 出发,一次只盯住一个位置;每处理完一个位置,它按上面的规矩决定下一次落在哪里。落在数列末尾之后(位置达到 nn)就停下来,把 ss 报出来。

现在给定数列的长度 nn 和它的每一项,请你算出读码器会报出的数。

输入格式

从文件 code.in 中读入数据。

第一行一个正整数 nn。

第二行 nn 个整数 a0,a1,…,an−1a_0, a_1, \dots, a_{n-1},相邻两个整数之间用一个空格隔开。

输出格式

输出到文件 code.out 中。

一行一个整数,表示读码器报出的数。

数据范围

对于所有测试数据,保证:1≤n≤1041 \le n \le 10^4,1≤ai≤1031 \le a_i \le 10^3。

测试点 n≤n \le 特殊性质
1~2 1010 无
3~6 100100
7~10 10001000
11~14 10410^4
15~18
19 A
20 B

特殊性质 A:所有 aia_i 均为奇数。

特殊性质 B:存在位置 pp,使得下标不小于 pp 的每一项都是偶数。

5
1 2 3 4 5
1
6
3 1 4 1 5 9
-2

样例解释

样例 1:读码器从位置 00 出发。位置 00 的数是 11,奇数,位置 00 是偶数,于是把 11 加上,ss 变成 11,下一个位置是 11。位置 11 的数是 22,偶数,不做加减,下一个位置是 33。位置 33 的数是 44,偶数,不做加减,下一个位置是 55。位置 55 已经达到数列末尾,读码器停下,报出 11。

样例 2:位置 00 的数是 33,奇数,位置 00 为偶数,加上 33,s=3s = 3,走到位置 11;位置 11 的数是 11,位置 11 为奇数,减去 11,s=2s = 2,走到位置 22;位置 22 的数是 44,偶数,走到位置 44;位置 44 的数是 55,位置 44 为偶数,加上 55,s=7s = 7,走到位置 55;位置 55 的数是 99,位置 55 为奇数,减去 99,s=−2s = -2,走到位置 66,读码器停下,报出 −2-2。

难度 未评定
通过率 —
尝试 0
通过 0
ID
3765
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者

相关