#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";
数列里一共有 项,位置编号从 起,即第一项的位置是 ,最后一项的位置是 。读码器从位置 出发,一次只盯住一个位置;每处理完一个位置,它按上面的规矩决定下一次落在哪里。落在数列末尾之后(位置达到 )就停下来,把 报出来。
现在给定数列的长度 和它的每一项,请你算出读码器会报出的数。
输入格式
从文件 code.in 中读入数据。
第一行一个正整数 。
第二行 个整数 ,相邻两个整数之间用一个空格隔开。
输出格式
输出到文件 code.out 中。
一行一个整数,表示读码器报出的数。
数据范围
对于所有测试数据,保证:,。
| 测试点 | 特殊性质 | |
|---|---|---|
| 1~2 | 无 | |
| 3~6 | ||
| 7~10 | ||
| 11~14 | ||
| 15~18 | ||
| 19 | A | |
| 20 | B |
特殊性质 A:所有 均为奇数。
特殊性质 B:存在位置 ,使得下标不小于 的每一项都是偶数。
5
1 2 3 4 5
1
6
3 1 4 1 5 9
-2
样例解释
样例 1:读码器从位置 出发。位置 的数是 ,奇数,位置 是偶数,于是把 加上, 变成 ,下一个位置是 。位置 的数是 ,偶数,不做加减,下一个位置是 。位置 的数是 ,偶数,不做加减,下一个位置是 。位置 已经达到数列末尾,读码器停下,报出 。
样例 2:位置 的数是 ,奇数,位置 为偶数,加上 ,,走到位置 ;位置 的数是 ,位置 为奇数,减去 ,,走到位置 ;位置 的数是 ,偶数,走到位置 ;位置 的数是 ,位置 为偶数,加上 ,,走到位置 ;位置 的数是 ,位置 为奇数,减去 ,,走到位置 ,读码器停下,报出 。
- ID
- 3765
- 类型
- 传统题
- Time Limit
- 1000ms
- Memory Limit
- 512MiB
- 上传者
相关
在下列比赛中: