暴力解答,肯定超时,因为我刚开始把所有答案,存到了ans这个vector里面了,然后进行枚举情况,后面发现因为这个阶数很高的时候,就会直接炸内存,所以我直接选择了在dfs里面进行统计答案,我是纯暴力,没有啥优化思路。
我觉得你们可以试试,这个算贡献优化一下,或者枚举这么多优化优化,或者看我暴力把所有情况观察观察,看有没有啥规律或者潜在的计数优化地方。我没看出来,我比较菜,只会暴力。
只能拿十三分,纯暴力。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
const int mod=998244353;
vector<vector<int>>ans;
vector<int> temp;
int n,m;
int a[maxn];
int sum=0;
int get_num(vector<int> v)
{
set<vector<int>>s;
for(int i=0;i<v.size();i++)
{
for(int j=i;j<v.size();j++)
{
vector<int>te;
for(int k=i;k<=j;k++){
te.push_back(v[k]);
}
s.insert(te);
}
}
return s.size()%mod;
}
void dfs(int x)
{
if(x==n+1)
{
sum=(sum+get_num(temp))%mod;
return;
}
for(int i=1;i<=m;i++)
{
temp.push_back(m*a[x]+i);
dfs(x+1);
temp.pop_back();
}
}
void solve() {
cin>>n>>m;
sum=0;
for(int i=1;i<=n;i++) cin>>a[i];
dfs(1);
cout<<sum%mod<<"\n";
ans.clear();
}
signed main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int T;T=1;
cin>>T;
while(T--){
solve();
}
}