蓝桥笔记

蓝桥要多枚举几种情况
1、双指针不要越界
完全二叉树的权值

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x7fffffff
int const N=1e5+7;
ll n,m,cnt,ans,p;
ll a[N];
int main(){
    cin >> n;
    ans=-INF;
    for(int i=1;i<=n;++i){
        cin >> a[i];
    }
    int depth=log(n)/log(2)+1;
    int j=1;
    for(int i=1;i<=depth;++i){
        ll z=0;
        while(j<=n&&j<(1<<i)) z+=a[j],++j;
        if(z>ans) ans=z,p=i;
    }
    cout << p;
    return 0;
}

2、等差数列公差可以为0
gcd(0,8)==8 ; gcd(0,0)==0;
z=gcd(a,b); //表示a和b都是z的倍数
所以公差要是所有任意两个数差的因子

等差数列

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x7fffffff
int const N=1e5+7;
ll n,m,cnt,ans,p;
ll a[N];
int main(){
    cin >> n;
    for(int i=1;i<=n;++i){
        cin >> a[i];
    }
    sort(a+1,a+n+1);
    ll d=0;
    for(int i=2;i<=n;++i){
        d=__gcd(d,a[i]-a[i-1]);
    }
    if(d==0){
        cout << n;
        return 0;
    }
    ll cnt=(a[n]-a[1])/d+1;
    cout << cnt;
    return 0;
}

3、后缀表达式还原出来有括号,并且固定好了运算顺序
参考博客

4、(a+b)%k==0 表示a与b的和是k的倍数
(a10+b)%k==0 表示...
(a
10%k + b%k)%k==0

全部评论

相关推荐

叁六玖:你看,最后不是让你加油,就是鼓励你,还祝福你求职顺利。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务