贪心(set维护)
竞赛中心 - 蓝桥云课
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{// 请在此输入您的代码int n;cin>>n;int result=0;set<int>pre;int h;for(int i=0;i<n;i++){cin>>h;set<int>cur;while(h!=1){cur.insert(h);if(!pre.count(h)){result++;}h=sqrtl(h/2+1);}pre=cur;}cout<<result<<endl;return 0;
}
定义数组pre存储已经处理过的竹子的长度,cur数组储存当前处理的这个竹子的长度。使用set类型更符合题意。
思路就是将每一个竹子都砍到1,统计每一次砍后的长度,直到到1。当遇到后面的竹子砍后的值没有与之前的相同,这时可以对结果加一。如果遇到相同的高度,按照题意就可以与前面的竹子一块砍去。
sqrtl函数:sqrtl
是 C 语言标准库 <math.h>
中的一个函数,用于计算 long double
类型数据的平方根。其精度高于 sqrt
(针对 double
类型)和 sqrtf
(针对 float
类型)。