2022蓝桥杯-砍竹子
#include<iostream> #include<algorithm> #include<cmath> #include<cstdio> using namespace std; typedef long long ll; ll fun(ll high) { high = high/2 + 1; high = long (sqrt(high)); return high; } void bian(ll begin,ll end,ll *arr) //把相同长度的且连续的值 操作掉 { arr[begin] = fun(arr[begin]); for(ll i=begin;i<=end;i++){ arr[i] = arr[begin]; } } int main() { ll n; ll sum = 0; scanf("%lld",&n); ll h[n]; for(ll i=0;i<n;i++){ scanf("%lld",&h[i]); } ll i,j,pmax=1; //pmax找数组里面的最大值用的,(设为1,应为1只可能是最小情况) ll index = 0; //下标 for(i=0;i<n;i++){ if(pmax < h[i]) { //注意用的是(小于号)没有用小于等于! index = i; //最大值下标 pmax = h[i]; } } while(h[index] > 1){ //最大值不为1需要操作 for(j=index+1;j<n;j++){ if(h[j] != h[j-1]) //(上面用小于号的细节)找到数组后面相同的值 break; } bian(index,j-1,h); //相同值的下标范围 sum++; pmax = 1; for(i=0;i<n;i++){ //上面找最大值一样的代码 if(pmax < h[i]) { index = i; pmax = h[i]; } } } printf("%lld",sum); return 0; }
自己写的代码不知道有问题没有,考试的时候最开始看错题了,后来,写一个数组忘记先给变量n赋值就定义了n的数组了、、、、(检查半天没找出来)g了