题解:AT_abc367_c [ABC367C] Enumerate Sequences

大致题意

让你按照字典序输出一些长 \(n\) 的序列,序列中的数字有范围,且序列和需要为 \(k\)

分析

直接深搜。搜索的时候对从第一个元素开始,每个元素从小到大枚举所有可能的值,这样就保证答案按照字典序升序排列。

用一个 vector 存储序列,到达边界之后计算一遍和,判断是否满足条件,然后直接输出 vector 中的元素即可。

按照题目的数据范围完全可以过。

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
	int w=1,s=0;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') w=-1;ch=getchar();}
	while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
	return w*s;
}
const int maxn=1e6+10;
const int mod=1e9+7;
int n,k;
int a[maxn];
void dfs(int x,vector<int> ans)
{
	if(x>n)
	{
		int sum=0;
		for(auto i : ans)sum+=i;
		if(sum%k)return ;
		for(auto i : ans)cout<<i<<' ';
		cout<<'\n';
		return ;
	}
	for(int i=1;i<=a[x];i++)
	{
		ans.push_back(i);
		dfs(x+1,ans);
		ans.pop_back();
	}
}
signed main()
{
//	freopen("xxx.in","r",stdin);
//	freopen("xxx.out","w",stdout);
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
	}
	vector<int> v;
	dfs(1,v);
	return 0;
}

posted @ 2024-08-19 08:13  Redamancy_Lydic  阅读(14)  评论(0编辑  收藏  举报