DAY12

T1小W选数字(题目传送门)

思路

模板题(很简单)

代码

#include<bits/stdc++.h>
using namespace std;
int n,r,a[60];
void dfs(int x,int cnt)
{
	a[x]=1;	
	cout<<"  "<<x;
	if(cnt==r) 
	{
		a[x]=0;
		return;
	}
	for(int i=x+1;i+r-cnt-1<=n;i++)
	{
		dfs(i,cnt+1);
		if(i+r-cnt<=n)
		{
			cout<<endl;
			for(int i=1;i<=50;i++)
			{
			 	if(a[i]) cout<<"  "<<i;
			}
		}
	}
	a[x]=0;
	return;
}
int main()
{
	freopen("xsz.in","r",stdin);
	freopen("xsz.out","w",stdout);
	cin>>n>>r;
	for(int i=1;i+r-1<=n;i++)
	{
		dfs(i,1);
		if(i+r-1<n) cout<<endl;
	}
	return 0;	
}

错误原因

T2小W玩接龙1(题目传送门)

思路

每一次dfs,如果这个单词可以接在最后一个的后面,标记一下,dfs(这一个单词的最后) ans每次更新一下 输出ans

代码

#include<bits/stdc++.h>
using namespace std;
string s[60];
int vis[60];
int n,ans=1;
void dfs(char a,int u)
{
	ans=max(ans,u);
	for(int i=2;i<=n;i++)
	{
		char hh=s[i][0];
		if(vis[i]==0&&hh==a)
		{
			vis[i]=1;
			dfs(s[i][1],u+1);
			vis[i]=0;
		}
	}
	return;
}
int main()
{
	freopen("JL.in","r",stdin);
	freopen("JL.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s[i];
	}
	vis[1]=1;
	dfs(s[1][1],1);
	cout<<ans;
}

没想到的原因

T3小W来分组(题目传送门)

T4小W建围墙(题目传送门)

思路

代码

#include<bits/stdc++.h>
using namespace std;
char a[510][510];
int x,y,cnt=0;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
void dfs(int i,int j)
{
	a[i][j]='*';
	for(int k=0;k<4;k++)
	{
		int _x=i+dx[k],_y=j+dy[k];
		if(_x<1||_x>x||_y<1||_y>y) continue;
		else if(a[_x][_y]=='*') continue;
		else dfs(_x,_y);
	}
	return;
}
int main()
{
	freopen("cd.in","r",stdin);
	freopen("cd.out","w",stdout);
	cin>>x>>y;
	for(int i=1;i<=x;i++) for(int j=1;j<=y;j++) cin>>a[i][j];
	for(int i=1;i<=1;i++)
	{
		for(int j=1;j<=y;j++)
		{
			if(a[i][j]!='*') dfs(i,j);
		}
	} 
	for(int i=x;i<=x;i++)
	{
		for(int j=1;j<=y;j++)
		{
			if(a[i][j]!='*') dfs(i,j);
		}
	} 
	for(int j=1;j<=1;j++)
	{
		for(int i=1;i<=x;i++)
		{
			if(a[i][j]!='*') dfs(i,j);
		}
	} 
	for(int j=y;j<=y;j++)
	{
		for(int i=1;i<=x;i++)
		{
			if(a[i][j]!='*') dfs(i,j);
		}
	} 
	for(int i=1;i<=x;i++) for(int j=1;j<=y;j++) if(a[i][j]=='0') cnt++;
	cout<<cnt;
}