可以用dfs吗
查看原帖
可以用dfs吗
1130818
Lbk222楼主2024/4/30 11:04
#include<iostream>
#include<algorithm>
#include<set>
#include<cmath>
#include<string.h>
//933D
using namespace std;
using ll=long long;

int a[1010],p[1010];
char c[1010];
bool st[1010];
int t,n,m,z;
set<int>s;

void dfs(int k)
{
	if(k>t)
	{
		s.insert(z);
		return;
	}
	
	for(int i=1;i<=m;i++)
	{
		if(c[i]=='?'&&!st[i])
		{
			z=(z+a[i]-1)%n+1;
			st[i]=true;
			dfs(k+1);
			z=(z-a[i]+n-1)%n+1;
			st[i]=false;
			
			z=(z-a[i]+n-1)%n+1;
			st[i]=true;
			dfs(k+1);
			z=(z+a[i]-1)%n+1;
			st[i]=false;
		}
	}
	return;
}

void solve()
{
	t=0;
	memset(p,0,sizeof p);
	memset(st,0,sizeof st);
	
	cin>>n>>m>>z;
	bool flag=false;
	
	for(int i=1;i<=m;i++)
	{
		cin>>a[i];
		cin>>c[i];
	}
	
	for(int i=1;i<=m;i++)
	{
		if(c[i]=='0')
		{
			z+=a[i]%n;
			z%=n;
		}
		
		if(c[i]=='1')
		{
			z=(z+n)-a[i]%n;
		}
		
		if(c[i]=='?')
		{
			flag=true;
			t++;
		}
	}
	
	if(!flag)
	{
		cout<<"1"<<"\n";
		cout<<z<<"\n";
		return;
	}
	
	else
	dfs(1);
	
	cout<<s.size()<<"\n";
	for(auto i:s)
	{
		cout<<i<<" ";
	}
	
	cout<<"\n";
	
	s.clear();
	
	return;
}

int main()
{
	int t=1;
	cin>>t;
	
	while(t--)
	solve();
	
	return 0;
}

这个代码wa2,佬们看看哪错了

2024/4/30 11:04
加载中...