蓝桥笔记
蓝桥要多枚举几种情况
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 表示...
(a10%k + b%k)%k==0