#293. CSP-J 初赛模拟(完善程序)
CSP-J 初赛模拟(完善程序)
三、完善程序(单选题,每小题 3 分,共计 30 分)
(1)全排列检查
给定长度为 的数组 ,判断其是否构成全排列。如果 都恰好在数组 中出现且仅出现一次,那么就称这个数组是一个全排列。试补全程序。
#include <bits/stdc++.h>
using namespace std;
bool is_permutation(vector<int> &a)
{
int n = ① ; // 第一问
vector<int> count( ② ); // 第二问
for (int i = 0; i < n; i++)
{
if ( ③ ) // 第三问
count[a[i]]++;
else
④ ; // 第四问
}
for (int i = 1; i <= n; i++)
if (count[ ⑤ ] > 1) // 第五问
return false;
return true;
}
int main()
{
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
if (is_permutation(a))
cout << "The sequence is a permutation.";
else
cout << "The sequence is not a permutation.";
return 0;
}
选择题
- ① 处应填( )。
{{ select(33) }}
a.length()a.size()a.back()a.capacity()
- ② 处应填( )。
{{ select(34) }}
0nn + 11000000000
- ③ 处应填( )。
{{ select(35) }}
1 <= a[i] && a[i] <= n1 <= a[i] <= n1 <= a[i] || a[i] <= na[i] < 1 || a[i] > n
- ④ 处应填( )。
{{ select(36) }}
breakcontinuereturn truereturn false
- ⑤ 处应填( )。
{{ select(37) }}
ia[i]i – 1i / 2
(2)跳跃
给定一个数组 ,每次跳跃从当前位置 跳至位置 。回答 次询问,每次给出 ,输出从 跳跃 次后的位置编号。试补全程序。
#include <iostream>
using namespace std;
const int N = 100010, LOG = 20;
int a[N], dp[N][LOG];
int main()
{
int n, q;
cin >> n >> q;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n; i++)
{
dp[i][0] = ① ; // 第一问
}
for (int k = 1; k < LOG; k++)
{
for (int i = 0; i < n; i++)
{
dp[i][k] = ② ; // 第二问
}
}
while (q--)
{
int x, k;
cin >> x >> k;
int u = x;
for (int j = 0; j < LOG; j++)
{
if ( ③ ) // 第三问
{
u = ④ ; // 第四问
}
}
cout << ⑤ << endl; // 第五问
}
return 0;
}
选择题
- ① 处应填( )。
{{ select(38) }}
ia[i]0dp[i][1]
- ② 处应填( )。
{{ select(39) }}
dp[dp[i][k - 1]][k - 1]dp[i][k - 1] + dp[i][k - 1]dp[i - 1][k - 1]dp[k - 1][i]
- ③ 处应填( )。
{{ select(40) }}
k & jk >> j(k >> j) & 1(k >> j) ^ 1
- ④ 处应填( )。
{{ select(41) }}
dp[j][u]dp[k][u]dp[u][j]a[u]
- ⑤ 处应填( )。
{{ select(42) }}
uxkdp[u][0]
相关
在下列比赛中: