腾讯笔试0901,代码实现+思路(c++)

第一题,水题
#include<iostream>
#include<algorithm>
#include<cstdio>
int n,m;
int cnt11,cnt12,cnt21,cnt22;
int num1[111111],num2[111111];
using namespace std;

int main()
{
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&num1[i]);
        if(num1[i]&1)
            cnt11++;
        else
            cnt12++;
    }
    for(int i=0;i<m;i++)
    {
        scanf("%d",&num2[i]);
        if(num2[i]&1)
            cnt21++;
        else
            cnt22++;
    }
    int ans=min(cnt11,cnt22)+min(cnt12,cnt21);
    printf("%d\n",ans);
}

第二题,简单的贪心策略
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n;
struct person
{
    int a,b;
}num[111111];
bool cmp(person a,person b)
{
    return a.b+b.a<a.a+b.b;
}

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d %d",&num[i].a,&num[i].b);
    }
    sort(num,num+n,cmp);
    long long ans=0;
    for(int i=0;i<n;i++)
    {
        ans+=(long long)i*num[i].a;
        ans+=(long long)num[i].b*(n-1-i);
    }
    cout<<ans<<endl;
}

第三题,没有做出来,gg
第四题,一个简单的单调栈模板题
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<stack>
using namespace std;
int n;
int w[111111];
int res[111111];
struct range
{
    int l,r;
}temp[111111];
stack<int> sk;
long long sum[111111];
long long ans;
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&w[i]);
        if(i==0)
            sum[i]=w[i];
        else
            sum[i]=sum[i-1]+w[i];
        temp[i].l=temp[i].r=i;
		while(!sk.empty()&&w[sk.top()]>w[i])
        {
            temp[sk.top()].r=i-1;
            temp[i].l=temp[sk.top()].l;
            sk.pop();
        }
        sk.push(i);
    }
    int temp1;

    if(!sk.empty())
        temp1=sk.top();
    while(!sk.empty())
    {
        temp[sk.top()].r=temp1;
        sk.pop();
    }
    ans=0;
	for(int i=0;i<n;i++)
    {
        ans=max(ans,(long long)w[i]*(sum[temp[i].r]-sum[temp[i].l-1]));
    }
    cout<<ans<<endl;
	return 0;
}


第五题,简单的动态规划
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<stack>
using namespace std;
int t,k;
int l,r;
int mod=1000000007;
long long dp[111111][2];
long long sum[111111];
int main()
{
    scanf("%d %d",&t,&k);
    dp[0][0]=1;
    for(int i=0;i<k;i++)
    {
        dp[i+1][0]=dp[i][0];
        dp[i+1][0]%=mod;
        dp[i+k][1]+=dp[i][0];
        dp[i+k][1]%=mod;
    }
    for(int i=k;i<=100000;i++)
    {
        dp[i+1][0]+=dp[i][0];
        dp[i+k][1]+=dp[i][0];
        dp[i+1][0]+=dp[i][1];
        dp[i+k][1]+=dp[i][1];
        dp[i+1][0]%=mod;
        dp[i+k][1]%=mod;
    }
    sum[0]=0;
    for(int i=1;i<=100000;i++)
    {
        sum[i]=sum[i-1]+dp[i][0]+dp[i][1];
        sum[i]%=mod;
    }
    while(t--)
    {
        scanf("%d %d",&l,&r);
        long long ans=sum[r]-sum[l-1];
        if(ans<0)
            ans+=mod;
        printf("%lld\n",ans);
    }
	return 0;
}


先这样,晚些更新详细思路
#腾讯##笔试题目##C++工程师#
全部评论
大佬。。。都是简单xxx
点赞 回复 分享
发布于 2019-09-01 22:07
tql 
点赞 回复 分享
发布于 2019-09-02 10:12
诶,感觉自己好菜…… 暑假里刷算法题,感觉笔试不是板子题都会凉……
点赞 回复 分享
发布于 2019-09-01 22:21
第一题也是这样做的,只通过了10%
点赞 回复 分享
发布于 2019-09-01 22:13
int n; while(cin >> n){     vector<int> ws(n);     for(int i = 0; i < n; i++)         cin>>ws[i];     vector<long> wsum(n);     wsum[0] = ws[0];     for(int i = 1; i < n; i++)         wsum[i] = wsum[i - 1] + ws[i];     vector<int> sv(1,0);     long maxx = 0;      int index = 1;     while(index < n || (index == n && (int)sv.size() > 0)){         if(index < n && ((int)sv.size() == 0 || ws[index] >= ws[sv.back()])){             sv.push_back(index);             index++;         }else{             int mn = ws[sv.back()];             sv.pop_back();             long curSum = 0;              if((int)sv.size() > 0){                 curSum = wsum[index - 1] - wsum[sv.back()];             }else curSum = wsum[index - 1];             curSum = mn * curSum;             maxx = max(maxx, curSum);         }     }      cout << maxx << endl; } 老哥,给你补上第四道🤣
点赞 回复 分享
发布于 2019-09-01 22:11
大佬,我第五道脑壳都想爆了
点赞 回复 分享
发布于 2019-09-01 22:09
和我一样
点赞 回复 分享
发布于 2019-09-01 22:09
这个真强
点赞 回复 分享
发布于 2019-09-01 22:08

相关推荐

半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-21 11:33
昨天是学校最后一场招聘会,鼠鼠去参加了,全场只有一个招聘java的岗位,上来先做一份笔试题,做完后他拿张纸对答案,然后开始问简历上的问题,深圳小厂,6-8k(题目如下),后面还有两轮面试。然后我就在招聘现场逛呀逛,看到有公司招聘电商运营,给的比上年的小厂还多,鼠鼠就去了解了下,然后hr跟鼠鼠要了份简历,虽然我的简历上面全是求职Java开发相关的内容,但是hr还是鼓励我说没关系,她帮我把简历给老板看看,下周一会给我通知。招聘会结束后鼠鼠想了一段时间,也和朋友聊了聊,发现我可能是不太适合这个方向,然后就跟爸爸说回家了给我发条微信,我有些话想跟他说说。晚上爸爸到家了,跟我发了条微信,我立马跑出图书馆跟他打起了电话,这个通话长达一个小时,主要是跟爸爸坦白说我不想找这行了,是你的儿子太没用了,想试试其他行业。然后爸爸也跟我说了很多,说他从来没有希望我毕业后就赚大钱的想法,找不到就回家去,回家了再慢慢找,实在找不到就跟他干(帮别人装修房子,个体户),他也知道工作不好找,让我不要那么焦虑,然后就是聊一些家常琐事。对于后面的求职者呢我有点建议想提一下,就是如果招实习的时间或者秋招开始,而你的简历又很差的情况下,不要说等做好项目填充完简历之后再投,那样就太晚了,建议先把熟悉的项目写上简历,然后边投边面边完善,求职是一个人进步的过程,本来就比别人慢,等到一切都准备好后再投岂不是黄花菜都凉了。时间够的话还是建议敲一遍代码,因为那样能让你加深一下对项目的理解,上面那些说法只是针对时间不够的情况。当然,这些建议可能没啥用,因为我只是一个loser,这些全是建立在我理想的情况下,有没有用还需其他人现身说法。上篇帖子没想到学校被人认了出来,为了不丢脸只能匿名处理了。
KPLACE:找研发类或技术类,主要还是要1.多投 2.多做准备,很多方面都要做准备 3.要有心理准备,投累了就休息一两天,再继续,要相信自己能找到
投递58到家等公司7个岗位
点赞 评论 收藏
分享
评论
4
50
分享

创作者周榜

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