腾讯后台第三次笔试
100,100,0,100,60
1.很迷,if(n!=s.length())return 1。然后提示返回值错误。。。。魔改了一下最后是过了。。。
#include <iostream> #include <cstdio> #include <cstring> #include <vector> using namespace std; int main() { // freopen("in", "r", stdin); int t; cin >> t; int n; string s; while (t--) { cin >> n; cin >> s; int flag = 0; n=max(n,(int)s.length()); for (int i = 0; i < n - 10; i++) { if (s[i] == '8') { flag = 1; break; } } if (flag) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }
2.双指针模拟一下就行
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <bits/stdc++.h> using namespace std; struct node { long long x, y; }z[100005]; int cmp(node a,node b) { return a.y<b.y; } int main() { // freopen("in", "r", stdin); int n; cin>>n; for(int i=0;i<n;i++){ cin>>z[i].x>>z[i].y; } sort(z,z+n,cmp); long long maxn=z[0].y+z[n-1].y; for(int i=0,j=n-1;i<=j;){ if(i==j){ maxn=max(maxn,z[i].y+z[j].y); break; } while(z[i].x>=z[j].x&&i<j){ z[i].x-=z[j].x; maxn=max(maxn,z[i].y+z[j].y); j--; } while(z[i].x<z[j].x&&i<j){ z[j].x-=z[i].x; maxn=max(maxn,z[i].y+z[j].y); i++; } } cout<<maxn<<endl; return 0; }
3.不会 如果不要求人数 是个经典背包问题,容量为sum/2,要求人数相差不大于1,就不会了.
4.仔细看一下其实结果就是排序之后相邻两项的差。
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <bits/stdc++.h> using namespace std; int z[300005]; vector<int> v; int main() { // freopen("in", "r", stdin); int n,k; cin>>n>>k; for(int i=1;i<=n;i++){ cin>>z[i]; } sort(z+1,z+n+1); for(int i=1;i<=n;i++){ if(z[i]!=z[i-1]) v.push_back(z[i]-z[i-1]); } if(k<v.size()){ for(int i=0;i<k;i++){ cout<<v[i]<<endl; } } else { for(int i=0;i<v.size();i++){ cout<<v[i]<<endl; } k-=v.size(); // cout<<k<<endl; while(k--){ cout<<0<<endl; } } return 0; }
5.暴力冲了一发 数组2e4开小,过了30左右。开2e5过了60 牛客机器真快x。
正解应该是这个 贴个博客:https://blog.csdn.net/hypHuangYanPing/article/details/80612781
#include <iostream> #include <cstdio> #include <cstring> #include <vector> using namespace std; int a[200005],b[200005]; int main() { // freopen("in", "r", stdin); int n; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } for(int j=0;j<n;j++){ cin>>b[j]; } int ans=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ ans^=(a[i]+b[j]); } } cout<<ans<<endl; return 0; }#腾讯##笔试题目#