蓝桥杯真题31日冲刺国一 | 每日题解报告 第十八天

简介: 大家好,我是泡泡,昨天有点事,把题解都补上来,5115

一、找素数


题目链接:找素数跳转链接


题目要求:


找第100002个素数。


解题思路:


一个签到题,暴力求解就好啦,要注意一下while循环里面的num++不要放在后面。


#include<bits/stdc++.h>
using namespace std;
bool pd(int x)
{
  for(int i=2;i<=sqrt(x);i++)
  {
  if(x%i==0)
  {
    return false;
  }
  }
  return true;
}
int main()
{
  int m = 0,num = 1;
  while(m!=100002)
  {
  num++;
  if(pd(num))
  {
    m++;
  }
  }
  cout<<num;
  return 0;
}


二、分考场


题目链接:分考场


这个题我也不会,5115,全排列应该能骗分,大家有思路的可以去看看,后面会补。


三、合根植物


题目链接:进去登录点题集 真题 搜索合根植物


题目要求:


w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。


这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。

如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?


解题思路:


这是一个并查集的题目,很简单,套板子就好了,不会并查集的话我这里放一个链接,可以去看看,我觉得讲得很通透。


链接:通俗易懂并查集


#include<bits/stdc++.h>
using namespace std;
const int N = 1000010;
int m,n,k,pre[N],ans;
bool vis[N];
void init()
{
  memset(vis,0,sizeof(vis));
  for(int i=1;i<=n*m;i++)
  {
  pre[i] = i; 
  }
}
int find(int x)  
{
  if(x!=pre[x])
  {
  return pre[x] = find(pre[x]);
  }
  return x;
}
void join(int x,int y)
{
  int xx = find(x);
  int yy = find(y);
  if(xx!=yy)
  {
  pre[yy] = xx;
  }
}
int main()
{
  scanf("%d%d%d",&n,&m,&k);
  init();
  for(int i=0;i
  {
  int x,y;
  scanf("%d%d",&x,&y);
  join(x,y);
  }
  for(int i=1;i<=n*m;i++)
  {
  vis[find(i)] = 1;
  }
  for(int i=1;i<=n*m;i++)
  {
  ans += vis[i];
  }
  cout<<ans<<endl;
  return 0;
}


四、大胖子走迷宫


题目链接:进去登录点题集 真题 搜索大胖子走迷宫


题目要求:


30.png


解题思路:这是一个非常恶心(我认为)的bfs题,一开始我看的蒙了怎么还能变身????这是人吗,我减肥咋不能这么快,不过作为聪明的OIer(不是,肯定有解决的办法)


咱们先读入地图啊 然后弄一个判断是否走过的数组 还有上下左右四个方向啊 结构体(pair也行)


一个判断越界的函数 一个判断当前体重的函数


一个bfs(不会的赶紧去学)


案例图


+++++++++

+++++++++

+++++++++

+++++++++

+++++++++

***+*****

+++++++++

+++++++++

+++++++++


你这胖子体型占5*5,在33的地方,进队列!判断!因为死胖子一开始很胖 判断的时候记得根据他提醒判断循环,然后如果每次都让队列进一次死胖子原地不动 然后走四个方向 如果这个方向能走 那么把这个方向压入队头 到时候取出来的就是这个方向的位置了 死胖子经过时间流逝会变瘦 然后判断一下即可。


#include <bits/stdc++.h>
using namespace std;
const int N=310;
char s[N][N];//地图
int n,k;
int dx[] = {1,0,0,-1};//方向~
int dy[] = {0,-1,1,0};
bool vis[N][N];
struct node{
  int x,y,num,len;//位置 时间 体重
};
bool judge(int x,int y,int len) //判断是否搜过越界
{
  if(vis[x][y]||y+len>n||y-len<1||x+len>n||x-len<1)
  {
  return 0;
  }
  for(int i=x-len;i<=x+len;i++)//如果不越界没搜过 就看当前往这个方向走会不会有障碍
  {
  for(int j=y-len;j<=y+len;j++)//根据体重范围判断
  {
    if(s[i][j]=='*')
    {
    return 0;
    }
  }
  }
  return 1;
}
int f(int cnt)//当前的体重哦哦哦哦哦
{
  if(cnt
  {
  return 2;
  }
  else if(cnt<2*k)
  {
  return 1;
  }
  return 0;
}
int bfs()
{
  queueq;//新的队列q
  q.push({3,3,0,2});//把位置 时间 体重干进去
  vis[3][3]=1;//搜过了
  while(q.size())
  {
  node t=q.front();
        q.pop();
  int x=t.x;
  int y=t.y;
  int num=t.num;
  int len=t.len;
  if(x==n-2&&y==n-2)
  {
    return num;
  }
  if(len!=0)//不是最轻的情况
  {
    q.push({x,y,num+1,f(num+1)});//原地不动
  } 
  for(int i=0;i<4;i++)
  {
    int nx=x+dx[i];
    int ny=y+dy[i];
    if(judge(nx,ny,len))//能搜
    {
    vis[nx][ny]=1;
    q.push({nx,ny,num+1,f(num+1)});//干干干
    }
  }
  }
}
int main() 
{
  cin>>n>>k;
  for(int i=1;i<=n;i++)
  {
  for(int j=1;j<=n;j++)
  {
    cin>>s[i][j];
  }
  }
  int ans=bfs();
  cout<<ans;
  return 0;
}


总结:


今天题目bfs变种大家要好好理解方便自己更熟练的使用bfs。

目录
相关文章
|
存储
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题
106 1
|
测试技术
【蓝桥杯冲刺】蓝桥杯13届省赛C++b组真题-A~E题
【蓝桥杯冲刺】蓝桥杯13届省赛C++b组真题-A~E题
143 0
|
人工智能 测试技术 BI
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-编程题
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-编程题
110 0
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题
126 0
【蓝桥杯冲刺】日期类专题特训
【蓝桥杯冲刺】日期类专题特训
45 0
|
人工智能 测试技术
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-编程题
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-编程题
108 0
|
机器学习/深度学习 存储 测试技术
蓝桥杯冲刺-倒数第八天-省赛题
蓝桥杯冲刺-倒数第八天-省赛题
116 0
|
机器学习/深度学习 Python
【蓝桥杯真题】16天冲刺 Python
【蓝桥杯真题】16天冲刺 Python
217 0
【蓝桥杯真题】16天冲刺 Python
|
算法 Python 容器
【蓝桥杯真题】18天Python组冲刺 心得总结
【蓝桥杯真题】18天Python组冲刺 心得总结
183 0
【蓝桥杯真题】18天Python组冲刺 心得总结
蓝桥杯倒数七天冲刺国一之每日复习第六天
大家好,我是泡泡,今天是复习第六天!今天有事,稍微水一下
105 0