D:飞机降落(全排列)

#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)+lst[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:接龙数列(最长上升子序列)

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

定义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)

#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:整数删除 (堆+双链表)

 感觉是比较典的题目,用优先队列维护,存入值和下标,再用一个数组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;
}

第十四届蓝桥杯b组c/c++相关推荐

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

    第十四届蓝桥杯单片机组客观题1 以下客观题来自4T测评的模拟题,希望可以帮助到大家,加油丫 1.C 若希望将IAP15F2K61S2单片机的IO口输出电流能力较强,应将IO配置为( )模式. A : ...

  2. 【第十四届蓝桥杯单片机组模拟赛1】

    第十四届蓝桥杯单片机组模拟赛1 距第十四届蓝桥杯单片机还有不到一个月的时间啦,加油 源码 /*------------------------------第十四届蓝桥杯单片机模式赛---------- ...

  3. 2023年第十四届蓝桥杯javaB组 蜗牛解题思路(动态规划 O(n))

    E.蜗牛(时间限制: 1.0s 内存限制: 512.0MB) [问题描述] 这天,一只蜗牛来到了二维坐标系的原点. 在 x 轴上长有 n 根竹竿.它们平行于 y 轴,底部纵坐标为 0 ,横坐标分别 为 ...

  4. 【备战】【B组】第十四届蓝桥杯python组

    前言 相比报名参加蓝桥杯的大部分同学都是被忽悠来的,以为参加了就能增进自己的代码技术,从而鹤立鸡群,但实际上能坚持下来的人很少,笔者是一个大三下的老油条,自知保研无望,又不想考研重走高考路,那留给我的 ...

  5. 第十四届蓝桥杯cb组省赛个人题解

    试题 C: 冶炼金属 ​ 时间限制: 1.0s 内存限制: 256.0MB 本题总分:10 分 [问题描述] ​ 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X.这个 炉子有一个称作 ...

  6. 第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解

    本篇文章对第十四届蓝桥杯第三期模拟赛所有的题目进行了详细解析.如果大家还想刷题的话,我给大家整理出了第十二届的省赛真题:第十二届省赛C/C++ B组真题.推荐大家可以去做一下. 文章目录 一.填空题 ...

  7. 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组

    第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组 注意!!!!!!!!!!这篇题解为赛时的个人做法,不代表是正确的,仅供参考. 更新:思路上应该都对,很多题都有细节错误,代码不用看了,太久没敲代 ...

  8. 第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-职业院校组-知识点题解

    这个题解是参考了"海底烧烤店ai"一位非常优秀的全栈领域创作者的博主写的,自己在看的时候发现个人知识点比较欠缺,所以就在题解下面添加了一些知识点,便于理解. 原博主的文章链接如下: ...

  9. 2023.05.14十四届蓝桥杯青少组中高级组省赛Python

    蓝桥杯大赛青少组 第十四届蓝桥杯Python中级组省赛 选择题: T1. 编程题  LQSS14PB01 时间限制: 3000MS 内存限制: 589824KB 题目描述:(注.input()输入函数 ...

最新文章

  1. mysql回表_到底什么情况下mysql innodb会发生回表操作?
  2. word取消“在页面视图中显示页面间空白”后,关闭打开又自动勾上
  3. 用 LaTeX 排版编程技术书籍的一些个人经验
  4. 【Qt】2D绘图之双缓冲绘图
  5. luogu P2791 幼儿园篮球题
  6. 数据中心机房设计及各专业技术平衡
  7. 关于ExtJS通过单击左边的treePanel在居中的panel加载页面问题
  8. HDU - 2204 Eddy‘s爱好(尚未完全解决)
  9. 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...
  10. 困扰的问题终于解决了-docker时区不正确的问题修改记
  11. 【优化预测】基于matlab贝叶斯网络优化LSTM预测【含Matlab源码 1329期】
  12. sns java_JEESNS首页、文档和下载 - Java 开源 SNS 社区系统
  13. VSCode 即时英文翻译插件 【翻译(英汉词典)】
  14. 如何在PS中用渐变字体
  15. [转载]关于字体的一些常识
  16. bootstrap 详细教程笔记
  17. 基于SSH框架开发的毕业生求职报名系统
  18. 保姆级教程:深度学习环境配置指南!(Windows、Mac、Ubuntu全讲解)
  19. web 前后台数据交互的方式
  20. Java训练work3.Exer2---跳跃最大长度

热门文章

  1. 数据结构——舞伴问题
  2. 今晚7:30 | 罗切斯特大学张宋扬、英国剑桥大学刘方宇
  3. 春节“聊天宝”使用秘籍,轻松应对亲戚尬聊
  4. 张驰咨询:制造业实施精益生产管理,应从这些小事做起
  5. Python:爬取FaceBook用户头像
  6. 科技爱好者周刊:第 92 期
  7. 【论文阅读】Towards Graph Self-Supervised Learning with Contrastive Adjusted Zooming
  8. 论文笔记--Deep contextualized word representations
  9. 下载smartBi报表
  10. Flask(十二)——消息闪现