百度笔试题(10分钟ak,含代码)
十分钟ak,没啥好说的,反正把我挂了,随便做做。
第一题直接判断一下(n+m)的奇偶性就行,代码暂无。
第二题:直接分a[i] > b[i] 和 a[i] < b[i] 即可然后贪心一下:
#include<bits/stdc++.h> using namespace std; int n; long long a[100005],b[100005]; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ cin>>b[i]; } long long res1 = 0; long long res2 = 0; for(int i=1;i<=n;i++){ if(a[i] > b[i]){ res1 = res1 + a[i] - b[i]; } else{ res2 = res2 + b[i] - a[i]; } } cout<<max(res1,res2)<<endl; }
第三题:二分+差分即可(线段树也可)
#include "bits/stdc++.h" using namespace std; long long sub[100005]; long long a[100005]; int rr[100005],ll[100005]; int n,m; bool check(int x){ for(int i=1;i<=n;i++){ sub[i] = 0; } for(int i=1;i<=x;i++){ sub[ll[i]] += 1; sub[rr[i] + 1] -= 1; } for(int i=1;i<=n;i++){ sub[i] = sub[i - 1] + sub[i]; if(sub[i] > a[i]) return false; } return true; } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=m;i++){ cin>>ll[i]>>rr[i]; } int l = 1; int r = m; int ans = 0; while (l<=r){ int mid = (l+r) >> 1; if(check(mid)){ ans = mid; l = mid + 1; } else{ r = mid - 1; } } cout<<ans<<endl; }#笔试##笔试题解##百度##题解##我的实习求职记录#