第十四届蓝桥杯b组c/c++

这篇具有很好参考价值的文章主要介绍了第十四届蓝桥杯b组c/c++。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

D:飞机降落(全排列)

第十四届蓝桥杯b组c/c++

 

#include<iostream>
#include<cstring>
using namespace std;

const int N = 12;
int n;
struct node{
    int t, d, l;  //t为此飞机的最早降落时间 d为盘旋时间 l为降落所需时间
}p[N];
bool st[N];

//DFS求全排列模型
bool dfs(int u, int last){
    if(u == n) return true;

    for(int i = 0; i < n; i ++ ){
        int t = p[i].t, d = p[i].d, l = p[i].l;
        if(st[i]) continue;
        if(t + d >= last){  //最晚降落时间t+d大于等于上一层的降落结束时刻
            st[i] = true;
            if(dfs(u + 1, max(last, t) + l)) return true; //当前层的最早降落结束时刻为max(last,t)+l
            st[i] = false;
        }
    }

    return false;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    int T; cin >> T;
    while(T -- ){
        cin >> n;
        for(int i = 0; i < n; i ++ ){
            int t, d, l; cin >> t >> d >> l;
            p[i] = {t, d, l};
        }

        memset(st, 0, sizeof(st));
        cout << (dfs(0, 0) ? "YES" : "NO") << endl;
    }

    return 0;
}

E:接龙数列(最长上升子序列)

第十四届蓝桥杯b组c/c++

 

要求使得数列变成接龙数列的最少删除个数, 相当于求该数列的最长接龙子数列的长度, 用总长度减去最长接龙长度即为最少删除个数。

定义dp[i][j]为前i个数中, 以数字j结尾的最长接龙数列的长度。

设第i个数的首位数字是a, 末位数字是b。 则dp[i]中相对于dp[i−1]
可能发生变化的只有dp[i][b]

, 因为第i个数只可能加到一个以a结尾的接龙数列中, 使得这个接龙数列长度加1并且结尾数字变成b.

所以状态转移方程为dp[i][b] = max(dp[i - 1][b], dp[i - 1][a] + 1)

而显然第一维可以优化掉。

#include <bits/stdc++.h>
using namespace std;
int dp[10];

int main () {
    int n, mx = 0; cin >> n;
    for (int i = 0; i < n; i ++) {
        string s; cin >> s;
        int a = s[0] - '0', b = s.back() - '0';
        dp[b] = max(dp[b], dp[a] + 1), mx = max(mx, dp[b]);
    }
    cout << n - mx << endl;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N],dp[N];
int t[11];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		dp[i]=1;
		a[i]=x%10;
		while(x>9)
		x/=10;
		b[i]=x;
}
	int maxx=0;
	for(int i=1;i<=n;i++)
{
    dp[i]=max(dp[i],t[b[i]]+1);
	t[a[i]]=max(t[a[i]],dp[i]);
	maxx=max(dp[i],maxx);
}
	cout<<n-maxx;
}

 

 F:岛屿个数(双重bfs)

第十四届蓝桥杯b组c/c++

 

#include<bits/stdc++.h>
using namespace std;
const int N=55;
int n,m;
string a[N];
bool v[N][N],use[N][N];
int dx[]={-1,1,0,0,-1,-1,1,1},dy[]={0,0,-1,1,-1,1,-1,1};
void bfs_col(int x,int y)//染色 
{
	v[x][y]=1;
	queue<int>qx,qy;
	qx.push(x),qy.push(y);
	while(!qx.empty())
	{
		x=qx.front(),y=qy.front();
		qx.pop(),qy.pop();
		for(int i=0;i<4;i++)
		{
			 int xx=x+dx[i],yy=y+dy[i];
			if(xx<0||xx>=n||yy<0||yy>=m||v[xx][yy]||a[x][y]=='0')continue;
			v[xx][yy]=1;
			qx.push(xx),qy.push(yy);
		}
	}
}
bool bfs_out(int x,int y)//判断能否出去 
{
	for(int i=0;i<n;i++)
	for(int j=0;j<m;j++)
	use[i][j]=0;
	
	queue<int>qx,qy;
	qx.push(x),qy.push(y);
	use[x][y]=1;
	
	while(!qx.empty())
	{
		x=qx.front(),qx.pop();
		y=qy.front(),qy.pop();
		if(x==0||x==n-1||y==0||y==m-1)return true;
		for(int i=0;i<8;i++)
		{
			int xx=x+dx[i],yy=y+dy[i];
			if(xx<0||xx>=n||yy<0||yy>=m||a[xx][yy]=='1'||use[xx][yy])continue;
			qx.push(xx),qy.push(yy),use[xx][yy]=1;
		}
	}
	return false;	
}
void solve()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		for(int j=0;j<m;j++)
		v[i][j]=0;	
	}
	int ans=0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		if(!v[i][j]&&a[i][j]=='1')
		{
			bfs_col(i,j);
			if(bfs_out(i,j))ans++;
		}
	}
	cout<<ans<<endl;
}
int main()
{
	int T;
	cin>>T;
	while(T--)solve();
	return 0;
}

H:整数删除 (堆+双链表)

第十四届蓝桥杯b组c/c++

 感觉是比较典的题目,用优先队列维护,存入值和下标,再用一个数组cnt累计每个下标增加的和,当弹出最小的值下标为 i 时,如果此时cnt[i]不等于0,说明它实际的值需要加上cnt[i],我们将其增加后再放回优先对列,注意需要清空cnt[i]。如果此时cnt[i]等于0,那我们就成功弹出当前最小元素,这时需要将其前一个元素和后一个元素值增加,我们需要模拟链表去记录每个元素的前后元素是谁,pre[i]表示下标为i的上一个元素是谁,ne[i]表示下标为 i 的下一个元素是谁,直到堆的元素个数只剩n-k时结束循环。不难想象,堆元素的出入次数是线性的。

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
typedef long long LL;
typedef pair<LL,int> PII;
LL cnt[N]; 
int pre[N],ne[N];
int n,k;
void solve()
{
	priority_queue<PII,vector<PII>,greater<PII>>q;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		LL v;
		cin>>v;
		q.push({v,i});
		pre[i]=i-1;
		ne[i]=i+1;
	}
	int g=n-k;
	while(q.size()>g)
	{
		auto p=q.top();
		q.pop();
		LL v=p.first,i=p.second;
		if(cnt[i])
		{
			q.push({v+cnt[i],i});
			cnt[i]=0;
		}
		else
		{
			int l=pre[i],r=ne[i];
			cnt[l]+=v;
			cnt[r]+=v;
			pre[r]=l;
			ne[l]=r;
		}
	}
	vector<LL> a(n+1);
	for(int i=0;i<g;i++)
	{
		auto p=q.top();
		q.pop();
		a[p.second]=p.first+cnt[p.second];
	}
	for(int i=1;i<=n;i++)
	if(a[i])
	cout<<a[i]<<" ";
}
int main()
{
	solve();
	return 0;
}


 文章来源地址https://www.toymoban.com/news/detail-445312.html

到了这里,关于第十四届蓝桥杯b组c/c++的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 第十四届蓝桥杯. 接龙数列(线性DP)

    对于一个长度为 K 的整数数列:A1,A2,...,AK,我们称之为接龙数列当且仅当 A i 的首位数字恰好等于 A i−1 的末位数字 (2≤i≤K)。 例如 12,23,35,56,61,11 是接龙数列;12,23,34,56 不是接龙数列,因为 56 的首位数字不等于 34 的末位数字。 所有长度为 11 的整数数列都是接龙数

    2024年02月02日
    浏览(12)
  • 第十四届蓝桥杯编程题部分代码题解

    C. 冶炼金属 最大值就是取 a / b a / b a / b 的最小值,最小值就是二分找到满足 m i d ∗ ( b i + 1 ) ≥ a i mid * (b_i + 1) ≥ a_i mi d ∗ ( b i ​ + 1 ) ≥ a i ​ 的最小值 D. 飞机降落 全排列枚举所有降落方案,然后判断即可 E. 接龙数列 状态定义: f [ i , j ] f[i, j] f [ i , j ] 为前 i i i 个数,

    2023年04月11日
    浏览(10)
  • 【第十四届蓝桥杯单片机冲刺版】

    【第十四届蓝桥杯单片机冲刺版】

    明天就是正式比赛啦,今天可以在把各个模块练习一遍,常考的外设相关代码一定要熟练哦。 比赛时拿到资料包了,检查驱动文件,使用到的驱动文件,自己做相应的修改,确保是能够正常使用(驱动修改相关可看之前的文章)。 下面是自己将常考的外设结合一起的练习,

    2023年04月27日
    浏览(48)
  • 【第十四届蓝桥杯单片机组客观题1】

    【第十四届蓝桥杯单片机组客观题1】

    以下客观题来自4T测评的模拟题,希望可以帮助到大家,加油丫 1、C 若希望将IAP15F2K61S2单片机的IO口输出电流能力较强,应将IO配置为( )模式。 IAP15F2K61S2单片机的IO口输出电流能力较强,应将IO配置为推挽输出模式。 2、A 当下列IAP15F2K61S2单片机的中断源同时发出中断请求时

    2023年04月09日
    浏览(10)
  • 蓝桥杯经验贴(第十四届蓝桥杯C++B组)

    个人背景 在参加第十四届蓝桥杯前,系统学过基础算法和简单数据结构、能熟练使用C++编写程序、参加过CCPC河北省赛、力扣通过题数1300+,力扣竞赛分数 2000+。 省赛和国赛的准备阶段 在https://www.dotcpp.com/、https://dasai.lanqiao.cn/、https://www.luogu.com.cn/上练习往年真题,也会在力扣

    2024年02月10日
    浏览(7)
  • 2023蓝桥杯C++A组题解(第十四届)

    2023蓝桥杯C++A组题解(第十四届)

    今年广东省三中游,按New Oj估分,前5题估分17(第1题√,3,4,5题暴力) 第2题(B)dfs写错了,第7题(G)并查集,多了个以前没见过的要求,找不到思路 面向 爆零选手 水平有限,将就着看,有空再补充后5题 目录 🤯吐槽 😟A,2067: [蓝桥杯2023初赛] 幸运数 😟B,2068: [蓝桥

    2023年04月15日
    浏览(10)
  • 第十四届蓝桥杯b组c/c++

    第十四届蓝桥杯b组c/c++

        要求使得数列变成接龙数列的最少删除个数, 相当于求该数列的最长接龙子数列的长度, 用总长度减去最长接龙长度即为最少删除个数。 定义dp[i][j]为前i个数中, 以数字j结尾的最长接龙数列的长度。 设第i个数的首位数字是a, 末位数字是b。 则dp[i]中相对于dp[i−1] 可

    2024年02月04日
    浏览(10)
  • 第十四届蓝桥杯省赛C++ A组浅析

    (仅个人看法,对错未知,可以当做口胡QAQ)如有错误请大佬们指出,有更好做法欢迎留言! 暴力判不多说了 看到很多搜的,提供一个dp做法 d p [ i ] [ j ] 表示前 i 道题,答对 j 道的方案数 dp[i][j]表示前i道题,答对j道的方案数 d p [ i ] [ j ] 表示前 i 道题,答对 j 道的方案数

    2023年04月13日
    浏览(15)
  • 2023第十四届蓝桥杯Java B组个人题解

    2023第十四届蓝桥杯Java B组个人题解

    欢迎大家阅读蓝桥杯文章专栏🍄🍄 🔥 2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现 ) 🔥 2023第十四届蓝桥杯模拟赛第三期个人题解(Java实现 ) 🔥 蓝桥杯备赛之动态规划篇——背包问题 🔥 蓝桥杯备赛之动态规划篇——涂色问题(区间DP) 🔥 蓝桥杯真题——单词

    2023年04月15日
    浏览(12)
  • 第十四届蓝桥杯省赛PythonA/C组------翻转

    小蓝用黑白棋的n个棋子排成了一行,他在脑海里想象出了一个长度为n的01串T,他发现如果把黑棋当做1,白棋当做0,这一行棋子也是一个长度为n 的01串S。 小蓝决定,如果在S中发现一个棋子和它两边的棋子都不一样,就可以将其翻转变成另一个颜色。也就是说,如果S中存在

    2024年01月22日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包