腾讯后台第三次笔试
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;
} #腾讯##笔试题目#
阿里云工作强度 705人发布
