lanqiao 2117 砍竹子
This commit is contained in:
27
13lanqiao/test10.cpp
Normal file
27
13lanqiao/test10.cpp
Normal file
@@ -0,0 +1,27 @@
|
||||
// lanqiao 2117 砍竹子
|
||||
#include<bits/stdc++.h>
|
||||
using namespace std;
|
||||
#define int long long
|
||||
signed main(){
|
||||
int n; cin >> n;
|
||||
set<int> pre; // 记录上一次竹子高度变化
|
||||
int ans = 0;
|
||||
for(int i = 1; i <= n; i++){
|
||||
int h; cin >> h;
|
||||
set<int> cur; // 维护当前竹子的高度变化
|
||||
while(h != 1){
|
||||
cur.insert(h);
|
||||
// 如果上一根竹子高度变化中没有h,则需要单独消耗一次操作
|
||||
// 否则若相邻两根竹子在高度递减过程中存在高度相同的情况,则第二根竹子不需要重新计数,因为两根竹子一起砍就行了
|
||||
if(!pre.count(h)) ans++;
|
||||
h = sqrtl(h/2 + 1);
|
||||
}
|
||||
pre = cur;
|
||||
}
|
||||
cout << ans << endl;
|
||||
return 0;
|
||||
}
|
||||
/* test samples -> 5
|
||||
6
|
||||
2 1 4 2 6 7
|
||||
*/
|
||||
Reference in New Issue
Block a user