腾讯2021批笔试题解

article/2025/11/5 16:12:17

总结:一套算是正常的笔试…算是让大家有点思考了…都没那么一眼秒(除了强烈谴责某T5最短路板子。我还差点没看到这题hhh((

(另一套题的T5)
T5

题目大意:给出n个红球,n个黑球,给出交叉排列的序列。每次操作可以交换两个相邻的球,要使得两种颜色的球都递增,问最小操作次数
n < = 3000 n<=3000 n<=3000

真有你的腾讯。。。ARC的C都能拉来当笔试了(不过我做过hhh

A R C 097 C ARC097C ARC097C
我的提交记录

思路:考虑 d p [ i ] [ j ] dp[i][j] dp[i][j]为第i个黑球,第j个红球按顺序的最小操作次数,那么转移就是 d p [ i ] [ j ] = m i n ( d p [ i − 1 ] [ j ] + B ( i , j ) , d p [ i ] [ j − 1 ] + W ( i , j ) ) dp[i][j]=min(dp[i-1][j]+B(i,j),dp[i][j-1]+W(i,j)) dp[i][j]=min(dp[i1][j]+B(i,j),dp[i][j1]+W(i,j))
B ( i , j ) B(i,j) B(i,j)为i号黑球前,有几个比i号黑球大,比j号红球大的球。
W ( i , j ) W(i,j) W(i,j)为i号红球前,有几个比i号黑球大,比j号红球大的球。
(因为考虑前i个黑,j个红球都顺序正常了,那么就只用考虑剩下的了。)

这两个东西用树状数组预处理一下就好。

C++代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define ll long long
#define maxn 4005
#define inf 1e9
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
using namespace std;inline int read()
{int x=0,w=1; char c=getchar();while(c<'0'||c>'9') {if(c=='-') w=-1; c=getchar();}while(c<='9'&&c>='0') {x=(x<<1)+(x<<3)+c-'0'; c=getchar();}return w==1?x:-x;
}int c1[maxn],c2[maxn],B[maxn][maxn],W[maxn][maxn],n,x[maxn];
int x1[maxn],x2[maxn],cnt1,cnt2,dp[maxn][maxn];
char s[maxn],q;inline void a1(int x,int val){for(int i=x;i<=n;i+=i&-i) c1[i]+=val;}
inline void a2(int x,int val){for(int i=x;i<=n;i+=i&-i) c2[i]+=val;}
inline int q1(int x){int res=0; for(int i=x;i;i-=i&-i) res+=c1[i]; return res;}
inline int q2(int x){int res=0; for(int i=x;i;i-=i&-i) res+=c2[i]; return res;}int main()
{n=read(); rep(i,1,2*n) cin>>s[i],x[i]=read();rep(i,1,2*n){if(s[i]=='B'){a1(x[i],1);rep(j,0,n) B[x[i]][j]=i-q1(x[i])-q2(j);}else{a2(x[i],1);rep(j,0,n) W[j][x[i]]=i-q1(j)-q2(x[i]);}}rep(i,0,n) rep(j,0,n) dp[i][j]=inf; dp[0][0]=0;rep(i,0,n) rep(j,0,n){if(i!=0) dp[i][j]=min(dp[i][j],dp[i-1][j]+B[i][j]);if(j!=0) dp[i][j]=min(dp[i][j],dp[i][j-1]+W[i][j]);}cout<<dp[n][n]<<endl;return 0;
}

T1

题目大意:给出数组A,求出一个长度为2*n的子序列B使得:前n部分递减,后n部分递增,B[n]=B[n+1]
n < = 1000 , A i < = 10000 n<=1000,A_i<=10000 n<=1000,Ai<=10000

首先预处理时,顺着对每个点求一边最长不升子序列,1到i处LDS为 d p [ i ] dp[i] dp[i]
然后倒着处理一遍最长不降子序列,i处到结尾的LIS为 d p 2 [ i ] dp2[i] dp2[i]
由于n只有1000,直接枚举i和j,当 a [ i ] , a [ j ] a[i],a[j] a[i],a[j]相等时即可统计答案。
统计答案为 a n s = m a x ( a n s , 2 ∗ m i n ( d p [ i ] , d p 2 [ j ] ) ) ans=max(ans,2*min(dp[i],dp2[j])) ans=max(ans,2min(dp[i],dp2[j]))

C++代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define ll long long
#define maxn 1000005
#define inf 1e9
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
using namespace std;inline int read()
{int x=0,w=1; char c=getchar();while(c<'0'||c>'9') {if(c=='-') w=-1; c=getchar();}while(c<='9'&&c>='0') {x=(x<<1)+(x<<3)+c-'0'; c=getchar();}return w==1?x:-x;
}int n,dp[maxn],dp2[maxn],a[maxn];int main()
{int T=read();while(T--){n=read(); rep(i,1,n) a[i]=read();int ans=0;rep(i,1,n) dp[i]=1,dp2[i]=1;rep(i,1,n) rep(j,1,i-1) if(a[i]<a[j]) dp[i]=max(dp[i],dp[j]+1);per(i,n,1) per(j,n,i+1) if(a[i]<a[j]) dp2[i]=max(dp2[i],dp2[j]+1);rep(i,1,n) rep(j,i+1,n) if(a[i]==a[j]) ans=max(ans,2*min(dp[i],dp2[j]));cout<<ans<<endl;}return 0;
}

T2

题目大意:给出一元n次方程组,求出所有根。(保留两位小数)
n < = 5 , a b s ( A i ) < = 10 n<=5,abs(A_i)<=10 n<=5,abs(Ai)<=10

枚举每个点即可…如果 f ( x ) ∗ f ( x + 0.001 ) < 0 f(x)*f(x+0.001)<0 f(x)f(x+0.001)<0 [ x , x + 0.001 ] [x,x+0.001] [x,x+0.001]间存在一个根。

C++代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,ans=0;
double a[10];
double f(double x)
{double now=1,num=0;for(int j=0;j<=n;j++){num+=now*a[j];now*=x;}return num;
}
int main()
{scanf("%d",&n);double x=1e12;for(int i=n;i>=0;i--){scanf("%lf",&a[i]);}for(double i=-20.000;i<=20.000;i+=0.001){if(f(i)*f(i+0.001)<0||f(i)==0){ans=1;printf("%.2lf ",i);}}if(!ans)printf("No");return 0;
}

T3

题目大意:给出长度为n的线段,如果当前长度>L就随机切一刀,舍弃左边,保留右边,问期望切多少刀后无法继续操作。(答案保留两位小数)
n < = 200 , L < = 200 n<=200,L<=200 n<=200,L<=200

怎么有神仙网友随机模拟过了啊…真是太强了…学到许多Orzzz…

以及这是神仙网友的正解数学做法…太神了!学到许多Orzzz…
答案是 l n L − l n D + 1 lnL-lnD+1 lnLlnD+1
(我老数学fw了…只能跪跪跪

upd:已更新随机模拟程序(自测基本能有三位小数的正确性…交上去确实应该稳过emm)

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define ll long long
#define maxn 1000005
#define inf 1e9
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
using namespace std;inline int read()
{int x=0,w=1; char c=getchar();while(c<'0'||c>'9') {if(c=='-') w=-1; c=getchar();}while(c<='9'&&c>='0') {x=(x<<1)+(x<<3)+c-'0'; c=getchar();}return w==1?x:-x;
}int main()
{srand(time(0));double x1,x2; cin>>x1>>x2;int cnt=0,T=1000000;rep(z,1,T){double n=x1,d=x2;while(n>=d){int x=rand();n=n*x; n/=32767; cnt++;}}double ans=(double)cnt/T;cout<<ans<<endl;printf("%.2lf\n",ans);return 0;
}

T4

题目大意:给出n个集合(数字顺序无关),每个集合有6个数(Ai),问是否存在两个集合相等。
n < = 1 e 6 , A i < = 1 e 9 n<=1e6,A_i<=1e9 n<=1e6,Ai<=1e9

每个集合内元素排序,然后hash一下集合的值,map判断即可

C++代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define maxn 1000005
#define inf 1e9
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
using namespace std;inline int read()
{int x=0,w=1; char c=getchar();while(c<'0'||c>'9') {if(c=='-') w=-1; c=getchar();}while(c<='9'&&c>='0') {x=(x<<1)+(x<<3)+c-'0'; c=getchar();}return w==1?x:-x;
}int a[maxn];
ull h[maxn];map <ull,int> p;int main()
{int T=read();while(T--){int n=read(),F=0; p.clear();rep(i,1,n){rep(j,1,6) a[j]=read(); sort(a+1,a+7);ull tmp=0;rep(j,1,6) tmp=tmp*233+a[j];if(p[tmp]) F=1; p[tmp]++;}if(F==1) puts("YES"); else puts("NO");}return 0;
}

T5

题目大意:给出一张有向图,求T次从1走到n再走回1的最短路。
n < = 1 e 5 , m < = 1 e 5 n<=1e5,m<=1e5 n<=1e5,m<=1e5

怎么又是最短路板子题。。。

C++代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
struct data_p{int hed,bj;ll ans;}pot[10005];
struct data_l{int nxt,to;ll v;}lin[500005];
int n,m,st,top=0,que[100005];
ll ans,T;
void add_l(int a,int b,ll c)
{lin[++top].to=b;lin[top].v=c;lin[top].nxt=pot[a].hed;pot[a].hed=top;}
void SPFA()
{for(int i=1;i<=n;i++){pot[i].ans=2147483647;pot[i].bj=0;}int l=0,r=0;que[r++]=st;pot[st].ans=0;while(l<r){int now=que[l++];pot[now].bj=0;for(int i=pot[now].hed;i;i=lin[i].nxt){if(pot[lin[i].to].ans<=pot[now].ans+lin[i].v)continue;pot[lin[i].to].ans=pot[now].ans+lin[i].v;if(pot[lin[i].to].bj)continue;pot[lin[i].to].bj=1;que[r++]=lin[i].to;}}
}
int main()
{while(scanf("%d%d%lld",&n,&m,&T)!=EOF){top=0;st=1;for(int i=1;i<=n;i++)pot[i].hed=0;for(int i=1;i<=m;i++){int x,y;ll z;scanf("%d%d%lld",&x,&y,&z);add_l(x,y,z);}SPFA();ans+=pot[n].ans;st=n;SPFA();ans+=pot[1].ans;printf("%lld\n",ans*T);ans=0;}return 0;
}

END:海星…算是从这次笔试中学到了神仙的随机模拟做法…可太神了,震撼.jpg。以及以后要记得每题都先看看…首先切掉T5这种大板子题hhh…


http://chatgpt.dhexx.cn/article/OlFMoknO.shtml

相关文章

腾讯笔试题精选一

1.32位机上根据下面的代码&#xff0c;问哪些说法是正确的&#xff1f;&#xff08;&#xff09; signed char a 0xe0 unsigned int b a; unsigned char c a; A. a>0 && c>0 为真 B.a c 为真 C.b的十六进制表示是&#xff1a;0xfffffe0 D.上面都不对 sig…

腾讯笔试题_20220424

前言 笔试一共五道编程题&#xff0c;满分是100分&#xff0c;时间是两个小时&#xff0c;可以跳题&#xff0c;使用的平台是牛客网&#xff0c;允许跳出界面使用本地IDE。 题目一&#xff1a;构建数字 给定n个长度均为m的数字字符串&#xff0c;从上往下构建成m个新的数&am…

笔试面试(1)腾讯2014校园招聘软件开发类笔试试题

把基本经典的书籍认真看看,那些笔试面试的都不是什么问题。但是,专门的突击和训练还是很有必要的。 好的offer是可以通过充分的准备刷到的。 我们就从各大公司的套题开始刷起吧,中间再穿插一些专题。 今天先看看腾讯的2014年校招的软开笔试题。 考试时长:120分钟 一 不定项…

腾讯近三年软件测试工程师面试笔试题目精选(包含答案)

目录 1、什么是兼容性测试?兼容性测试侧重哪些方面? 2、我现在有个程序&#xff0c;发现在 Windows 上运行得很慢&#xff0c;怎么判别是程序存在问题 还是软硬件系统存在问题? 3、测试的策略有哪些? 4、正交表测试用例设计方法的特点是什么? 5、描述使用 bugzilla 缺…

Dev ChartControl 显示设置百分比

**Dev ChartControl 显示设置百分比**//Y轴设置成百分数显示((XYDiagram)Chart.Diagram).AxisY.Label.TextPattern "{V:0%}";//显示的值为百分数 for (int j 0; j < Chart.Series.Count; j){Series march Chart.Series[j];march.CrosshairLabel…

DevExpress——ChartControl知多少(C#)

目前在做的这个项目后端是使用.NET框架在做,前端是借助DevExpress框架做开发,由于是基于Winform的页面实现,于是DevExpress提供了全套的Winform的解决方案,弥补了Winform本身的工具箱不全且不再维护的弊端。DevExpress提供的表图控件叫做ChartControl,在其上面可以完成图表…

Dev中的ChartControl的Y轴显示单位

1.点击Y轴,打开属性 2.找到Title属性,设置其中的 Alignment(单位文本显示的位置) Font(文本字体大小) Text(文本内容) TextColor(文本颜色) Visibility(可见性) 设置完成后即可在图中看到设置效果

DEV控件之ChartControl用法 z

一、总体概述 这个控件包含3层&#xff0c;最外面的chartControl层、中间的XYDiagram层、最里面的Series层。功能非常强大&#xff0c;但同时使用起来也相对复杂&#xff0c;需要各个层之间相互协调设置才能达到自己想要的效果。 二、chartControl层 像DEV的其它控件一样&#…

ChartControl控件绘制柱状图

1、新建一个DevExpress窗体&#xff08;不要用WinForm窗体&#xff09; 2、拖入一个chartcontrol控件 3、鼠标右键&#xff0c;点击run designer 添加两个series 4、代码设置 数据库表结构&#xff0c;我的想法是统计办事员和售货员的人数 数据库查询语句 select job,co…

C# WPF图表控件之ChartControl用法指南①

“ 引言部分&#xff0c;总领全篇文章的中心内容。” WPF的DevExpress ChartControl是一种功能强大的可视化工具&#xff0c;可帮助您将数据显示为二维或伪三维条形图、区域、线和许多其他形式。 01 — 将数据绑定到Chart Series Step 1. 创建新项目并添加图表 创建一个新的WPF…

chartControl控件常用属性总结

chartControl可以绘制常见的柱状图&#xff0c;折线图&#xff0c;饼图&#xff0c;在windows form 窗体应用程序中可以很方便的使用。下面总结一下如何使用chartControl控件绘图&#xff0c;以及一些常用的属性。 1.添加series DevExpress.XtraCharts.Series _serTimechartCo…

在C#中使用DevExpress中的ChartControl实现极坐标图

在C#中使用DevExpress中的ChartControl实现极坐标图 背景实现思路参考代码 背景 在工控软件的开发中很多业务场景就是使用图表控件展示设备和工艺参数。如下图案例&#xff1a; 实现思路 通常简单的做法是使用图表控件实现&#xff0c;常用的图表控件有开源的ZedGraph&…

DevExpress ChartControl ToolTipPointPattern和ToolTipSeriesPattern

原本只是想改一下鼠标放到曲线上的tip显示的小数点位数 然后就发现他这个属性还挺多&#xff0c;多到有点看不懂 然后就写了小demo测试 demo代码 // Create a series and add points to it. Series series1 new Series("Series 1", ViewType.Line);series1.Points…

Dev中ChartControl添加限定线

1.单击Y轴,设置属性 2.点击ConstantLines属性,打开"Constant Line Collection Editor"界面 3.点击Add添加线条 4.通过设置Appearance中的Color属性,设置显示颜色; 设置Behavior中的AxisValue,设置线段出现的位置 设置Misc中的Name,设置显示文本

chartControl生成时间轴动态曲线

首先将dev的chartControl拖到窗体中并设置父窗体停靠&#xff0c;然后手动添加一个seriies,如下图 初始化chartxiao using DevExpress.XtraEditors; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing…

DevExpress ChartControl 折线图简单使用

c# DevExpress ChartControl 折线图简单使用 DevExpress ChartControl折线图简单使用 DevExpress ChartControl折线图简单使用 1、界面放一个panel控件 2、定义一个DataTable 存储数据 3、获取数据后放在DataTable DataTable 定义&#xff1a; DataTable res_data new DataTa…

DevExpress之ChartControl用法

DevExpress中的ChartControl顾名思义就是数据基于图表展示&#xff0c;其关键在于Series上的处理。 using System; using System.Drawing; using DevExpress.XtraCharts;namespace DevExpressUtilHelpV3 { public static class ChartToolV3 { /// <summary> /// 创建Seri…

ChartControl控件绘制折线图

新建DevExpress窗体 SQLServer数据库中的数据如下&#xff1a; 拖入XtraTabControl控件&#xff0c;并修改Text属性 分别拖入GridControl控件和ChartControl控件 在GridControl控件中点击Run Designer,添加三列数据并分别设置FieldName(与数据库中对应) 在chartcontrol控件中…

DevExpress chartControl 数据绑定

DevExpress chartControl 数据绑定 chartControl 数据绑定ChartControl直接绑定Series 绑定例程附件 chartControl 数据绑定 这里介绍两种绑定方式ChartControl直接绑定以及ChartControl里的series绑定 ChartControl直接绑定 通过chartControl的DataSource属性直接bingdings…