某公司笔试真题

(仅仅记录一下)

1.模拟栈

#include<bits/stdc++.h>
using namespace std;
string h1,h2,h3;
char temp;
int len1,len2;
stack<char>ss;
int main()
{
    cin>>h1>>h2;
    len1=h1.length();
    len2=h2.length();
    h3="";
    if(len1!=len2)
        printf("-1\n");
    else{

    for(int i=len1-1, j=0; i>=0 && j<len2 ; ){
            temp=h2[j];
            ss.push(h1[i]);
            h3+="E";
            while(!ss.empty()&& temp==ss.top() ){
                h3+="D";
                ss.pop();///出栈
                j++;///往下走
                temp=h2[j];
                if(i<0 || j>=len2)
                    break;
            }
            i--;
        }
        if(ss.empty()){
            cout<<h3<<endl;
        }
        else
            cout<<"-1"<<endl;
    }
}

2.优雅暴力

3
3 1 2 3
4 1 2 3 4
4 1 2 3 5

输出:3


3
2 1 3
3 2 6 4
4 1 2 5 7

输出:2

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int mp[200][20000];
map<LL,LL>flag;
map<LL,LL>xpp[200];
int main()
{
    int t,n,sum,x;
    int num=0;
    scanf("%d",&t);
    int maxx=1;
    while(t--){
        sum=0;
        num++;///第几组
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&x);
            sum+=x;
            mp[num][i]=x;
        }
        xpp[num][sum]=1;
         flag[sum]++;
        for(int i=1;i<=n;i++){
            if(xpp[num][sum-mp[num][i]]==0)
            {
                flag[sum-mp[num][i]]++;
                xpp[num][sum-mp[num][i]]=1;
            }
            if(flag[sum-mp[num][i]]>maxx)
                maxx=flag[sum-mp[num][i]];
       ///         cout<<"num:"<<num<<" :"<<sum-mp[num][i]<<endl;
        }
    }
    printf("%d\n",maxx);

}

3.数位dp。待补。

题目链接:

https://blog.csdn.net/weixin_40124642/article/details/104567788

发布了565 篇原创文章 · 获赞 110 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/xianpingping/article/details/104783710