问题 5178 --天佑研究双向链表

5178: 天佑研究双向链表★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 161  解决: 47
[提交][状态][命题人:]

题目描述

去年CSP初赛,天佑栽了,因为他对位运算不熟悉。今年他希望自己不再有知识盲区,所以最近他在研究双向链表。

对于一个1n的排列P(1n中每一个数在P中出现了恰好一次),令q[i]为第i个位置之第一个比P[i]值更的位置,如果不存在这样的位置,则q[i]=0

举例来说,如果n=5P1 5 4 2 3,则q0 1 1 1 4

下列程序读入了排列P,使用双向链表求解了答案。试补全程序。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct node {
	int a, L, R;
} f[N];
int n;
int main() {
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		int x;
		cin >> x;
		___(1)___;
		f[i].L = i - 1;
		___(2)___;
	}
	for (int i = n; i >= 1; --i) {
		f[__(3)__].L = f[f[i].a].L;
		f[f[f[i].a].L].R = __(4)__;
	}
	for (int i = 1; i <= n; ++i) {
		cout << __(5)__ << " ";
	}
	cout << endl;
	return 0;
}

输入

输出

(1)   第1空的答案为_________

       A. f[i].a = x-1;    B. f[x].a = i-1;    C. f[i].a = x;    D. f[x].a = i; 
(2)   第2空的答案为_________

       A. f[f[i].L].R = i+1;    B. f[i].R = i+1;    C. f[f[x].a].L = f[i-1].L;    D. f[f[x].a].R = f[i+1].R; 
(3)   第3空的答案为_________

       A. f[i-1].a;    B. f[i+1].a;    C. f[f[f[i].a].L].R;    D. f[f[i].a].R; 
(4)   第4空的答案为_________

       A. f[f[f[i].L].R].a;    B. f[f[i].R].a;    C. f[f[i].a].R;    D. f[f[f[i].R].a].L; 
(5)   第5空的答案为_________

       A. f[f[i].a].L;    B. f[i].R;    C. f[f[i].a].R;    D. f[i].L; 

(6)   若输入为6  6 1 5 2 3 4,则输出为________

       A.   0 0 0 0 0 0        B.  6 6 6 6 6 6      C. 0 0 2 2 4 5       D. 0 0 2 2 4 4

只需提交6个选项的答案,一行一个,均为大写字母。代码格式如下:

#include<iostream>
using namespace std;
int main()
{
	cout<<"A\n";
	cout<<"A\n";
	cout<<"A\n";
	cout<<"A\n";
	cout<<"A\n";
	cout<<"A\n";
 	return 0;
}

提示

来源

[提交][状态]