本专栏内容为:蓝桥杯学习专栏,用于记录蓝桥杯的学习经验分享与总结。
💓博主csdn个人主页:小小unicorn
⏩专栏分类:C++
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识
目录
- 三带一:
- 思路:
- 数树树
- 思路:
- 分组:
- 思路:
三带一:
题目来源:三带一
题目描述:
思路:
排序+判断即可:
代码解决:
#include <algorithm>
using namespace std;
int main()
{int t;cin>>t;while(t--){string ch;cin>>ch;sort(ch.begin(),ch.end());if(ch[0]!=ch[3]&&(ch[0]==ch[2]||ch[1]==ch[3])){cout<<"Yes"<<endl;}elsecout<<"No"<<endl;}return 0;
}
数树树
题目来源:数树数
题目描述:
思路:
考察树的基本知识,按照题目方式编号的话:左端点为2U-1右端点为2U;然后模拟即可。
代码解决:
#include <iostream>
using namespace std;
void solve()
{int n=0;int m=0;cin>>n>>m;while(m--){string s; cin>>s;int ret=1;for(int i=0;i<s.length();i++){if(s[i]=='L') ret=ret*2-1;else ret*=2;}cout<<ret<<endl;} return ;
}
int main()
{// 请在此输入您的代码solve();return 0;
}
分组:
题目来源:分组
题目描述:
思路:
贪心+二分:
首先对身高数组进行排序,然后二分查找。不断检查是否可以将n个同学分成K个队伍,使得每个队伍的身高差不大于mid。通过贪心的方式,从左到右遍历身高数组,尽可能将同学加入当前队伍,直到当前队伍的身高差大于mid,然后开始新的队伍。最终计算分组的数量,如果分组数量小于等于k,说明mid值偏大
代码解决:
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;bool check(vector<int>& heights, int k, int max_diff)
{int cnt = 1, cur = heights[0], n = heights.size();for (int i = 1; i < n; i++){if (heights[i] - cur > max_diff){cnt++;cur = heights[i];}}return cnt <= k;
}
int main()
{int n, k;cin >> n >> k;vector<int> heights(n);for (int i = 0; i < n; ++i) cin >> heights[i];sort(heights.begin(), heights.end());int l = 0, r = heights[n - 1] - heights[0];while (l < r) {int mid = l + (r - l) / 2;if (check(heights, k, mid)) r = mid;else l = mid + 1;}cout << l << endl;return 0;
}