- 阳子墨 的博客
DAY12
- @ 2024-7-22 20:38:06
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;
}