其他分享
首页 > 其他分享> > 蓝桥杯真题31日冲刺国一 | 每日题解报告 第十四天

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

作者:互联网

大家好,我是泡泡,今天的题很多都是模板,大家要记好哦

目录

一、带分数(全排列)

二、走迷宫(bfs)

三、蓝桥幼儿园(并查集)

四丶跳石头(贪心二分)


一、带分数(全排列)

题目链接:带分数 - 蓝桥云课 (lanqiao.cn)

题目要求:

100 可以表示为带分数的形式:100 = 3 + 69258 / 714

还可以表示为:100 = 82 + 3546 / 197

注意特征:带分数中,数字 1~9 分别出现且只出现一次(不包含 0 )。

类似这样的带分数,100 有 11 种表示法。

解题思路:

全排列出1-9,排列出来所有的情况,在所有的排列中,枚举所有假分数的情况就行。

#include<bits/stdc++.h>
using namespace std;
int a[210];
bool st[210];
int ans,n;
void init()
{
	int aa=0,bb=0,cc=0;
	for(int i=1;i<=7;i++)
	{
		aa=0;
		for(int k=1;k<=i;k++)
		{
			aa*=10;
			aa+=a[k];
		}
		for(int j=i+1;j<=8;j++)
		{
			bb=0,cc=0;
			for(int k=i+1;k<=j;k++)
			{
				bb*=10;
				bb+=a[k];
			}
			for(int k=j+1;k<=9;k++)
			{
				cc*=10;
				cc+=a[k];
			}
			if(bb%cc)
			{
				continue;
			}
			if(aa+bb/cc==n)
			{
				ans++;
			}
		}
	}
}
void dfs(int u)
{
	if(u==9)
	{
		init();
	}
	for(int i=1;i<=9;i++)
	{
		if(!st[i])
		{
			st[i]=true;
			a[u+1]=i;
			dfs(u+1);
			st[i]=false;
		}
	}
}
int main()
{
	cin>>n;
	dfs(0);
	cout<<ans<<endl;
}

二、走迷宫(bfs)

题目链接:走迷宫 - 蓝桥云课 (lanqiao.cn)

题目要求:

给定一个 N×M 的网格迷宫 GG 的每个格子要么是道路,要么是障碍物(道路用 1 表示,障碍物用 0 表示)。

已知迷宫的入口位置为 (x1​,y1​),出口位置为 (x2​,y2​)。问从入口走到出口,最少要走多少个格子。

解题思路:

BFS套就完了。

#include<bits/stdc++.h>
using namespace std;
const int N = 110;
typedef pair<int,int>PII;
queue<PII>q;
int a,b,c,t;
int g[N][N],d[N][N];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
int n,m;
int bfs(int x,int y)
{
    q.push({x,y});
    d[x][y] = 0;
    while(q.size())
    {
        PII t = q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            int xx = t.first + dx[i];
            int yy = t.second + dy[i];
            if(d[xx][yy]==-1&&g[xx][yy]==1)
            {
                d[xx][yy]=d[t.first][t.second]+1;
                q.push({xx, yy});
            }
        }
    }
    return d[c][t];
}
int main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            cin >> g[i][j];
        }
    }
    memset(d, -1, sizeof d);
    cin >> a >> b >> c >> t;
    cout << bfs(a, b);
    return 0;
}

三、蓝桥幼儿园(并查集)

题目链接:蓝桥幼儿园 - 蓝桥云课 (lanqiao.cn)

题目要求:

蓝桥幼儿园的学生是如此的天真无邪,以至于对他们来说,朋友的朋友就是自己的朋友。

小明是蓝桥幼儿园的老师,这天他决定为学生们举办一个交友活动,活动规则如下:

小明会用红绳连接两名学生,被连中的两个学生将成为朋友。

小明想让所有学生都互相成为朋友,但是蓝桥幼儿园的学生实在太多了,他无法用肉眼判断某两个学生是否为朋友。于是他起来了作为编程大师的你,请你帮忙写程序判断某两个学生是否为朋友(默认自己和自己也是朋友)。

解题思路:

并查集模板 加一个路径压缩,在查询程序 find_set() 中,查询元素 i 所属的集,需要搜索路径找到根结点,返回的结果是根结点。这条搜索路径可能很长,导致超时。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 8e5+5;
int s[maxn];
void init_set(){          
   for(int i = 1; i <= maxn; i++)
        s[i] = i;
}
int find_set(int x){
    if(x != s[x])
        s[x] = find_set(s[x]);  
    return s[x];
}
void merge_set(int x, int y){  
    x = find_set(x);
    y = find_set(y);
    if(x != y) s[x] = s[y];
}
int main (){
    int op, n, m, x, y;
    init_set();
    cin >> n >> m;
    while(m--){
        cin >> op >> x >> y;
        if(op == 1)   merge_set(x, y);
        if(op == 2){
            if(find_set(x)==find_set(y))
                cout << "YES"<<endl;
            else cout << "NO"<<endl;
        }
    }
    return 0;
}	

四丶跳石头(贪心二分)

题目链接:跳石头 - 蓝桥云课 (lanqiao.cn)

题目要求:

一年一度的"跳石头"比赛又要开始了!

这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。

为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走M 块岩石(不能移走起点和终点的岩石)。

解题思路:

直接二分加贪心。

#include<bits/stdc++.h>
using namespace std;
int L,N,M,a[100010];
bool ok(int x)
{
    int ret = 0, sx = 0;
    for(int i=1;i<=N;i++)
    {
        if(a[i]-a[sx]<x)
        {
            ret++;
        }
        else
        {
            sx = i;
        }
    }
    return ret<=M;
}
int main()
{
    cin>>L>>N>>M;
    for(int i=1;i<=N;i++)
    {
        cin>>a[i];
    }
    int j=L,i=1;
    while(i<=j)
    {
        int mid = (i+j)/2;
        if(ok(mid))
        {
            i = mid+1;
        }
        else
        {
            j = mid-1;
        }
    }
    cout<<i-1;
    return 0;
}

标签:set,题目,int,题解,岩石,带分数,蓝桥,第十四天
来源: https://blog.csdn.net/qq_45400861/article/details/123631942