腾讯校园招聘技术类编程题汇总

腾讯校园招聘技术类编程题汇总_第1张图片

 题解:并查集(模板)

#include 
#include
using namespace std;
int father[2000006];
int rank1[1000005];
void init(int n){
    for(int i=1;i<=1e5;i++){
        father[i]=i;
        rank1[i]=1;
    }
}
int find(int x){
    if(father[x]==x){
        return x;
    }
    while(x!=father[x])
    {
        x=father[x];
    }
    return x;
}
void merge(int x,int y){
    int x1=find(x);
    int y1=find(y);

    if (x1 != y1)                           //如果不是同一个集合
        {
            if (rank1[x1] < rank1[y1])     //rank大的集合合并rank小的集合
            {
                
                father[x1]=y1;
                rank1[y1]++;        
            }
            else if(rank1[x1] >= rank1[y1])
            {
                         father[y1]=x1;
                         rank1[x1]++;
            }
        }

        
}
mapmp;
int main() {
    int T;
    scanf("%d",&T);
    while(T--){
      int n;
      scanf("%d",&n);
      init(n);
      for(int i=0;i

腾讯校园招聘技术类编程题汇总_第2张图片

 题解:首先对于字符串大小的比较需要重写,然后利用优先队列维护前K个字符在队列中,最终取出队首元素即可

#include 
#include
#include
#include
#include
#include
using namespace std;

bool cmp1(string& a, string& b){
    if(a.size()==b.size())
{
            if(ab.size())
    {
            string c=a.substr(0,b.size());
            if(c==b)
            {
            return false;
            }
            else if(c>b)
            {
            return true;
            }
            else{
            return false;
            }
    }
    else 
    {
    string c=b.substr(0,a.size());
    if(c==a) return true;
    else if(c>a)
    {
        return false;
    }
    else{
        return true;
    }
    }
}

struct cmp {
    bool operator() (const string& a, const string& b) const {
           if(a.size()==b.size())
            {
                            if(ab.size())
           {
                 string c=a.substr(0,b.size());
                 if(c==b)
                 {
                    return false;
                 }
                 else if(c>b)
                 {
                    return true;
                 }
                 else{
                    return false;
                 }
           }
           else 
           {
            string c=b.substr(0,a.size());
            if(c==a) return true;
            else if(c>a)
            {
                return false;
            }
            else {
                return true;
            }
           }

         
    }
};
// priority_queue, cmp> que;
priority_queue,cmp> que;
mapmp;
int main() {
   
    string s;
    cin>>s;
    int k;
    scanf("%d",&k);
    // vectorve(k,"");
    for(int i=0;is2)<

腾讯校园招聘技术类编程题汇总_第3张图片

 题解:暴力求解

#include 
#include
using namespace std;
queueque;
int main() {
    int T;
    scanf("%d",&T);
    while(T--)
    {
       while(!que.empty()){
        que.pop();
       }
       int n;
       scanf("%d",&n);
       for(int i=0;i>s;
           getchar();
           if(s=="PUSH")
           {
               int x;
               scanf("%d",&x);
               que.push(x);
           }
           else if(s=="TOP")
           {
                if(que.empty())
                {
                    printf("%d\n",-1);
                }
                else{
                    printf("%d\n",que.front());
                }
           }
           else if(s=="POP"){
                   if(que.empty())
                {
                    printf("%d\n",-1);
                }
                else{
                    que.pop();
                }
           }
           else if(s=="SIZE"){
                  if(que.empty())
                {
                    printf("%d\n",0);
                }
                else{
                    printf("%d\n",que.size());
                }
           }
           else if(s=="CLEAR"){
                if(!que.empty())
                {
                    while(!que.empty()){
                        que.pop();
                    }
                }
           }
       }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

腾讯校园招聘技术类编程题汇总_第4张图片

 题解:先判断是否有交点,如果有,分段使用积分

#include 
#include
#include
using namespace std;

int main() {
    int T;
    scanf("%d",&T);
    while(T--){
        int A,B,C;
        scanf("%d%d%d",&A,&B,&C);
        int a=B*B;
        int b=2*B*C-2*A;
        int c=C*C;
        int t=b*b-4*a*c;
      
        if(t<0){
            double res=0;
            printf("%.10f\n",res);
            // printf("%.10f\n",0);出现了错误,由于printf存在缓冲区,会去取索引位0指针的值导致出错
        }
        else if(t==0)
        {
               double x=-1.0*b/(2*a*1.0);
              double s=sqrt(2*A*1.0)*x*sqrt(x*1.0)*4/3.0;
              printf("%.10f\n",s);

        }
        else if(t>0){
               double x1=(-1*b-sqrt(t*1.0))/(2*a*1.0);
               double x2=(-1*b+sqrt(t*1.0))/(2*a*1.0);
               
            double s1=sqrt(2*A*1.0)*x1*sqrt(x1*1.0)*4/3.0;
            double s2=(sqrt(2*A*1.0)*x2*sqrt(x2*1.0)*2/3.0-B*x2*x2/2.0-C*x2)-(sqrt(2*A*1.0)*x1*sqrt(x1*1.0)*2/3.0-B*x1*x1/2.0-C*x1);
            if(C<=0)
            {
                 printf("%.10f\n",s1+s2);
            }
            else{
                 printf("%.10f\n",s2);
            }
        }
    }
    return 0;
}

你可能感兴趣的:(算法,c++,开发语言)