#690. LG2024TG-17

LG2024TG-17

  1. (阅读程序)
#include <bits/stdc++.h>
using namespace std;
constexpr int mod=998244353;
int n,k,a[12],b[12],ans[12],fa[12];
int findfa(int u){return u==fa[u]?u:fa[u]==findfa(fa[u]);}
int functionUnknown(int a[],int n){
  if(n<=1) return 0;
  int i=n-1,j,k;
  while(true){
    j=i;
    --i;
    if(a[i]<a[j]){
      for(k=n;a[i]>=a[--k];);
      swap(a[i],a[k]);
      reverse(a+j,a+n);
      return 1;
    }
    if(!i){
      reverse(a,a+n);
      return 0;
    }
  }
  return -1;
}
int F(int x){
  int ans=0;
  for(int i=k-1;~i;--i)
    ans=(1ll*ans*x%mod+a[i])%mod;
  return ans;
}
int main(){
  scanf("%d %d",&n,&k);
  for(int i=0;i<k;++i) scanf("%d",a+i);
  for(int m=1;m<=n;++m){
    for(int i=0;i<m;++i) b[i]=i; //第34行
    do{
      for(int i=0;u,v;i<m;++i){
        u=findfa(i); v=findfa(b[i]);
        if(u==v) continue;
        --res;
        fa[u]=v;
      }
      int flag=0;
      for(int i=0;i<m;++i)
        if(b[i]==i) flag=1;
      if(flag) continue;
      ans[m]=(ans[m]+F(res))%mod;
    }while(functionUnknown(b,m));
    printf("%d%c",ans[m],"\n"[m==n]);
  }
  return 0;
}

假设输入的 n,k 是不超过 10 的正整数,输入的 a[i] 是不超过 10810^8 的正整数,完成下面的 判断题和单选题。

(判断题)

functionUnknown 函数的返回值不可能为 -1。( )

{{ select(1) }}

当输入的 k=1 时,输出的数值均能表示为 t×a[0]t×a[0] 的形式,其中 t 是一个整数。( )

{{ select(2) }}

如果把第 34 行整行改为 b[m-1]=m-1,则程序输出将会被改变。( )

{{ select(3) }}

(选择题)

在主函数中,findfa 函数被调用的次数与以下哪个选项同阶( )

{{ select(4) }}

  • O(n!)O(n!)
  • O(n!n)O(n!n)
  • O(n!n2)O(n!n^2)
  • O(n!n3)O(n!n^3)

对于以下的输入数据,输出结果为( )

5 5
1 2 3 4 5

{{ select(5) }}

  • 0 15 30 261 1500
  • 0 12 24 297 1788
  • 0 15 30 477 2940
  • 0 15 30 864 5520

functionUnknown 的功能接近于 C++ STL 库中的以下( )函数。

{{ select(6) }}

  • next_permutation
  • prev_permutation
  • is_sorted
  • is_permutation