CSP-j,T1,T2

解下来发四篇题解J T1~T3,S T1
T1
很简单吧每个字符串用map存一下统计不重复的就行了

for(int i=1;i<=n;++i)
{
	cin>>s;
	if(!mp[s])
	{
		ans++;
		mp[s]=1; 
	}
}
cout<<52-ans;

T2
根据题意模拟,考场上脑抽写了个BFS,那就来发BFS的代码吧

void bfs()
{
	queue<node>q;
	v[sx][sy]=1;
	vis[sx][sy][sd]=1;
	q.push({sx,sy,sd,0});
	while(!q.empty())
	{
		node now=q.front();
		q.pop();
		int nx=now.x+dx[now.d];
		int ny=now.y+dy[now.d];
        //继续走
		int nd=now.d;
		if(nx>=1&&ny>=1&&nx<=n&&ny<=m&&!vis[nx][ny][nd]&&now.step<k&&a[nx][ny]!='x')
		{
			v[nx][ny]=1;
			vis[nx][ny][nd]=1;
			q.push({nx,ny,nd,now.step+1});
		}
		else
		{
			if(nx>=1&&ny>=1&&nx<=n&&ny<=m&&a[nx][ny]!='x') continue;//如果不是因为这些说明不行
			nd=(now.d+1)%4;//转向
			if(!vis[now.x][now.y][nd])
			{
				v[now.x][now.y]=1;
				vis[now.x][now.y][nd]=1;
				q.push({now.x,now.y,nd,now.step+1});
			}
		}
	}
}

答案就是v数组的总和。
JT3,ST1我马上发

1 个赞

T2我的第一反应确实是BFS,但后来仔细想想,感觉不对,反手全删改成了模拟
(关于我模拟一开始模拟错了这件事,关键看了半天才改出来)