当前位置: 首页 > news >正文

2022天梯赛补题

题目详情 - L2-041 插松枝 (pintia.cn)

思路:模拟

  1. 背包就是个栈,开个stack解决
  2. 流程思路是,每次取推进器前,尽可能拿背包的,背包拿到不可以时,跳出
  3. 拿推进器时判断:
    1. 如果背包装得下,装入背包。往下继续
    2. 装不下,判断能不能插,不可以,换树枝。重新检查
#include <bits/stdc++.h>
using namespace std;
#define ll     long long
typedef unsigned long long ull;
typedef pair<long long, long long> pll;
typedef pair<int, int> pii;//double 型memset最大127,最小128
//std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const int INF = 0x3f3f3f3f;         //int型的INF
const ll llINF = 0x3f3f3f3f3f3f3f3f;//ll型的llINF
const int N =1e3 + 10;int a[N];
vector<int>ans[N];
stack<int>b;
int main()
{int n,m,k;cin>>n>>m>>k;for (int i=1; i<=n; ++i)cin>>a[i];int maxn=INF,p=1;for (int i=1; i<=n; ++i){while ((int)b.size()>0)//先拿背包{if (maxn>=b.top()){ans[p].push_back(b.top());maxn=b.top();b.pop();if ((int)ans[p].size()==k){p++,maxn=INF;}}else break;}if ((int)b.size()==m){if (a[i]<=maxn)//能插就插入{ans[p].push_back(a[i]);maxn=a[i];if ((int)ans[p].size()==k){p++,maxn=INF;}}else//不行,i保持下一次还是这里,换树枝{p++,maxn=INF,i--;}}else if ((int)b.size()<m)//背包有空间直接放{b.push(a[i]);}}while ((int)b.size()>0){if (maxn>=b.top()){ans[p].push_back(b.top());maxn=b.top();b.pop();if ((int)ans[p].size()==k){p++,maxn=INF;}}else{p++,maxn=INF;}}for (int i=1; i<=p; ++i)for (int j=0; j<(int)ans[i].size(); ++j){cout<<ans[i][j];if (j==(int)ans[i].size()-1)cout<<endl;else cout<<' ';}return 0;
}

题目详情 - L2-043 龙龙送外卖 (pintia.cn)

思路:画图模拟,dfs

  1. 假设我们需要到达上图蓝色点,显然绿色边都需要遍历。
  2. 因为每次点与点转移,所以一条路径走2次且最多两次,我们保证最优是这条路径走过一次来回就不会再走。
  3. 当然,我们到达最后一个点时,不需要回去(或者去其他点),那么我们在最深处不回去,不用走两遍的边显然是最多,为最优解。

我们设起点深度为0

#include <bits/stdc++.h>
using namespace std;
#define ll     long long
typedef unsigned long long ull;
typedef pair<long long, long long> pll;
typedef pair<int, int> pii;//double 型memset最大127,最小128
//std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const int INF = 0x3f3f3f3f;         //int型的INF
const ll llINF = 0x3f3f3f3f3f3f3f3f;//ll型的llINF
const int N = 1e5 + 10;int dep[N],head[N],f[N];
int num;
bool vis[N];//每条边,只走一次
struct node
{int next,to;
} edge[N];void add(int u,int v)
{edge[++num].next=head[u];edge[num].to=v;head[u]=num;
}void dfs(int u,int fa)//建立深度
{dep[u]=dep[fa]+1;for (int i=head[u]; i; i=edge[i].next){int v=edge[i].to;if (v!=fa)dfs(v,u);}
}int main()
{int n,m,st,x;cin>>n>>m;for (int i=1; i<=n; ++i){cin>>x;f[i]=x;if (x==-1)st=i;add(x,i);}dep[0]=-1;dfs(st,0);int maxn=0;//记录走过点的最深层ll ans=0;//ans记录至少需要走的边数*2vis[st]=1;//从起点出发肯定是访问过while (m--){cin>>x;maxn=max(maxn,dep[x]);while (!vis[x]){ans+=2;vis[x]=1;x=f[x];}cout<<ans-maxn<<endl;}
}

题目详情 - L2-044 大众情人 (pintia.cn)

思路:最短路

  1. 因为需要建立所有人之间的最短路,又因为数据是10^{2},之间floyd就可最短路径三大算法——1,弗洛伊德算法floyd
  2. 注意:题目要求所有异性,所以不认识也要算,距离无穷大
#include <bits/stdc++.h>
using namespace std;
#define ll     long long
typedef unsigned long long ull;
typedef pair<long long, long long> pll;
typedef pair<int, int> pii;//double 型memset最大127,最小128
//std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const int INF = 0x3f3f3f3f;         //int型的INF
const ll llINF = 0x3f3f3f3f3f3f3f3f;//ll型的llINF
const int N = 5e2 + 10;int dis[N][N];
bool sex[N];//标记性别,0为男,1为女int main()
{int n,k,x,d;char c;cin>>n;memset(dis,0x3f,sizeof(dis));//初始无穷大for (int i=1; i<=n; ++i){cin>>c>>k;if (c=='F')sex[i]=1;else sex[i]=0;while (k--){cin>>x>>c>>d;dis[i][x]=min(d,dis[i][x]);}}//floydfor (int k=1; k<=n; ++k)for (int i=1; i<=n; ++i)for (int j=1; j<=n; ++j)if (i!=j)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);vector<int>f,m;int fd=INF,md=INF;//大众情人的离他最远异性距离for (int i=1; i<=n; ++i){int maxn=0;//记录离i最远的异性for (int j=1; j<=n; ++j){if (sex[i]^sex[j]) //异或为真,性别不同{maxn=max(maxn,dis[j][i]);//j到i的距离(不是i到j,是其他人对i)}}if (sex[i])//女性{if (maxn<fd){fd=maxn;f.clear();f.push_back(i);}else if (maxn==fd)f.push_back(i);}else{if (maxn<md){md=maxn;m.clear();m.push_back(i);}else if (maxn==md)m.push_back(i);}}for (int i=0; i<(int)f.size(); ++i){cout<<f[i];if (i==(int)f.size()-1)cout<<endl;else cout<<' ';}for (int i=0; i<(int)m.size(); ++i){cout<<m[i];if (i==(int)m.size()-1)cout<<endl;else cout<<' ';}return 0;
}

题目详情 - L3-031 千手观音 (pintia.cn)

思路:拓扑排序

拓扑排序

  1. 每次如果前后两个字符串位数相同,比较第一个不同的位置
  2. 注意:题目的字典序最小是基于你所有确定的排完序后再确定的,所以我们必须建立小值到大值的边,而不是反过来。这样拓扑时,是不断确定最小位的,而为确定的位置也始终是从能不能放在低位考虑,而不是上来就因为入度0放最高位。
  3. 按照字典序升序排,那么我们需要建立小点到大点的边,然后跑最小堆。
  4. 不能反过来建反向边跑最大堆,这样你就不能保证是尽量让值小的排前面的前提下建字典序。如存在d->a,c如果最小堆答案是c.d.a,如果反向最大堆,写出来是d.a.c(因为一开始入度0只有a与c)
  5. 因为我们只需要查找,所以开无序map比较快,map有可能寄。
#include <bits/stdc++.h>
using namespace std;
#define ll     long long
typedef unsigned long long ull;
typedef pair<long long, long long> pll;
typedef pair<int, int> pii;//double 型memset最大127,最小128
//std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
const int INF = 0x3f3f3f3f;         //int型的INF
const ll llINF = 0x3f3f3f3f3f3f3f3f;//ll型的llINF
const int N = 1e5 + 10;unordered_map<string,int>mp;
string back[N];
int in[N];
int head[N],num;
struct node
{int next,to;
} edge[N];
void add(int u,int v)
{edge[++num].next=head[u];edge[num].to=v;head[u]=num;
}int main()
{std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n,cnt=0;cin>>n;string s,tmp;vector<string>b;while (n--){vector<string>a;cin>>s;s+='.';int len=0;//记录片段长度for (int i=0; i<(int)s.size(); ++i){if (s[i]=='.'){tmp=s.substr(i-len,len);if (!mp[tmp])mp[tmp]=++cnt,back[cnt]=tmp;a.push_back(tmp);len=0;}else len++;}if ((int)a.size()==(int)b.size()) //如果前后字符串相同{for (int j=0; j<(int)a.size(); ++j){if (a[j]!=b[j]){add(mp[b[j]],mp[a[j]]);in[mp[a[j]]]++;break;}}}b=a;}vector<string>ans;priority_queue< pair<string,int>,vector< pair<string,int> >,greater<pair<string,int> > >q;for (int i=1; i<=cnt; ++i)if (!in[i])q.push({back[i],i});while (!q.empty()){auto u=q.top();q.pop();ans.push_back(u.first);for (int i=head[u.second]; i; i=edge[i].next){int v=edge[i].to;if (--in[v]==0)q.push({back[v],v});}}for (int i=0; i<(int)ans.size(); ++i){cout<<ans[i];if (i==(int)ans.size()-1)cout<<endl;else cout<<'.';}return 0;
}

题目详情 - L3-032 关于深度优先搜索和逆序对的题应该不会很难吧这件事 (pintia.cn)

 思路:

  1. 假设u>v,我们讨论他们在树上的位置
    1. 如果u是v的祖先,显然他们构成一对逆序对,那么在所有dfs序里面他们都能有贡献,为dfs序排列数
    2. 如果u是v儿子,那么他们永远不构成逆序对,那么在所有dfs序里面他们都没有贡献
    3. 其他情况,那么在到达u与v的lca时,如果从lca先去u,那么u与v构成逆序对,否则不行。所以他的贡献是1/2dfs序的排列数。
  2. 显然,计算出每个点的祖先比他大的数量与儿子比他大的数量就能得到结果。然而,复杂度是O(n^{2}),所以我们可以在遍历树的时候,用树状数组维护当前树上深入路径时,比当前点u大的数量,那么他们就是贡献1的祖先,还有比u小的点的数量,显然u是比他们大的值且是他们的儿子,永远构成不了贡献。树状数组
  3. dfs序数量显然是每个点儿子排列的乘积
#include <bits/stdc++.h>
using namespace std;
#define ll     long long
#define int ll//全部开成ll
const int N = 3e5 + 10;
const int mod=1e9+7;
int n,num;
int t[N],head[N],dp[N],pre[N];
int cnt1,cnt2;//分别记录一直有贡献的逆序对数量与一直没贡献的逆序对数量
struct node
{int next,to;
} edge[N<<1];void add(int u,int v)
{edge[++num].next=head[u];edge[num].to=v;head[u]=num;
}void updateadd(int x,int k)
{for (int i=x; i<=n; i+=i&-i)t[i]=(t[i]+k)%mod;
}ll ask(int x)
{ll ans=0;for (int i=x; i; i-=i&-i)ans=(ans+t[i])%mod;return ans;
}ll fastpower(ll base,ll power)
{ll ans=1;while (power){if (power&1)ans=ans*base%mod;power>>=1;base=base*base%mod;}return ans;
}void dfs(int u,int fa)
{dp[u]=1;int cnt=0;//记录亲儿子数量for (int i=head[u]; i; i=edge[i].next){int v=edge[i].to;if (v!=fa){cnt++;cnt1=(cnt1+ask(n)-ask(v)+mod)%mod;//有减法的取模记得加mod保证正数cnt2=(cnt2+ask(v-1))%mod;updateadd(v,1);//把当前点加入树状数组后继续深入dfs(v,u);updateadd(v,-1);//出来后从树状树状删除dp[u]=dp[u]*dp[v]%mod;}}dp[u]=dp[u]*pre[cnt]%mod;//dp为组合数
}int32_t main()
{int r,x,y;cin>>n>>r;pre[0]=1;for (int i=1; i<=n; ++i)pre[i]=pre[i-1]*i%mod; //预处理排列数for (int i=1; i<n; ++i){cin>>x>>y;add(x,y),add(y,x);}updateadd(r,1);//显然根节点一直在树状数组dfs(r,0);int num=(n*(n-1)%mod*fastpower(2,mod-2)%mod-cnt2+mod)%mod;//贡献为1/2的点,即n*(n-1)/2-cnt2,当然是包括cnt1的,但是只算了cnt1一半的贡献,后面cnt1还有自己算另一半ll ans=(num*dp[r]%mod*fastpower(2,mod-2)%mod+cnt1*dp[r]%mod*fastpower(2,mod-2)%mod)%mod;cout<<ans<<endl;return 0;
}

相关文章:

2022天梯赛补题

题目详情 - L2-041 插松枝 (pintia.cn) 思路&#xff1a;模拟 背包就是个栈&#xff0c;开个stack解决流程思路是&#xff0c;每次取推进器前&#xff0c;尽可能拿背包的&#xff0c;背包拿到不可以时&#xff0c;跳出拿推进器时判断&#xff1a; 如果背包装得下&#xff0c;…...

字节跳动测试岗面试挂在2面,复盘后,我总结了失败原因,决定再战一次...

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;字节的游戏专场又是最早开始的&#xff0c;就投递了&#xf…...

Nodejs实现通用的加密和哈希算法(MD5、SHA1、Hmac、AES、Diffie-Hellman、RSA),crypto模块详解

crypto crypto模块的目的是为了提供通用的加密和哈希算法(hash)。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。 MD5和SHA1 MD5是一种常用的哈希算法,…...

测试行业3年经验,从大厂裸辞后,面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生

测试员可以先在大厂镀金&#xff0c;以后去中小厂毫无压力&#xff0c;基本不会被卡&#xff0c;事实果真如此吗&#xff1f;但是在我身上却是给了我很大一巴掌... 所谓大厂镀金只是不卡简历而已&#xff0c;如果面试答得稀烂&#xff0c;人家根本不会要你。况且要不是大厂出来…...

安卓悬浮窗口,  丝滑双指缩放视频窗口

最重要的事情说前面: demo源码:https://github.com/5800LDW/ProjectFloatingWindow前言:1.跨应用的浮动窗口在网上很多资料, 就不细说了。2.双指缩放View 也很多资料, 可参考:https://blog.csdn.net/zxq614/article/details/88873729正文下面进入正题, 如何把上述结合起来, 下面…...

300左右哪款蓝牙耳机适合学生用?四款便宜质量好的蓝牙耳机推荐

近年来&#xff0c;随着蓝牙耳机的发展&#xff0c;不管是音质、外观、佩戴还是降噪都有了很大的提升。但是我们在入手蓝牙耳机时&#xff0c;最好还是根据预算和需求入手。在此&#xff0c;我来给预算在三百内的朋友推荐几款便宜质量好的蓝牙耳机&#xff0c;可以当个参考。 …...

桥梁设计模式

介绍 Java桥梁模式(也称桥接模式)(Bridge Pattern)是一种设计模式,它将抽象和实现分离,使它们可以独立地变化.它通过一个大类或者一系列紧密关联的类拆分成两个独立的层次结构来实现这种分离,其中一个层次结构包含抽象类或接口,另一个层次结构包含实现类.桥梁模式使得抽象类和…...

【华为OD机试 2023最新 】 新员工座位(C++)

文章目录 题目描述输入描述输出描述用例题目解析C++题目描述 工位由序列F1,F2…Fn组成,Fi值为0、1或2。其中0代表空置,1代表有人,2代表障碍物。 1、某一空位的友好度为左右连续老员工数之和, 2、为方便新员工学习求助,优先安排友好度高的空位, 给出工位序列,求所有空…...

蓝桥杯刷题第二十二天

第一题&#xff1a;受伤的皇后题目描述有一个 nn 的国际象棋棋盘&#xff08;n 行 n 列的方格图&#xff09;&#xff0c;请在棋盘中摆放 n 个受伤的国际象棋皇后&#xff0c;要求&#xff1a;任何两个皇后不在同一行。任何两个皇后不在同一列。如果两个皇后在同一条 45 度角的…...

CentOS从gcc 4.8.5 升级到gcc 8.3.1

gcc -v查看当前gcc版本。 sudo yum install centos-release-scl-rh安装centos-release-scl-rh。 sudo yum install devtoolset-8-build安装devtoolset-8-build。 显示“Complete!”表示安装成功。 sudo yum install devtoolset-8-gdb安装devtoolset-8-gdb。 显示“Comple…...

【人人都能读标准】12. 原始类型的编码形式

本文为《人人都能读标准》—— ECMAScript篇的第12篇。我在这个仓库中系统地介绍了标准的阅读规则以及使用方式&#xff0c;并深入剖析了标准对JavaScript核心原理的描述。 ECMAScript有7种原始类型&#xff0c;分别是Undefined、Null、Boolean、String、Number、BigInt、Symbo…...

VUE进行前后端交互

目录 一、 跨域 1. 什么是跨域&#xff1f; 2. 什么是本域&#xff1f; 3. 浏览器请求的三种报错 二、SpringBoot解决跨域问题其他前后端跨域请求解决方案 1. SpringBoot上直接添加CrossOrigin 2. 处理跨域请求的Configuration 3. 采用过滤器的方式 3.1 方式一 3.2 方式…...

ThingsBoard Gateway:物联网设备数据采集与集成的强大解决方案

文章目录ThingsBoard Gateway&#xff1a;物联网设备数据采集与集成的强大解决方案1\. ThingsBoard Gateway&#xff1a;概述2\. 主要特点与优势3\. 应用场景4\. 如何使用ThingsBoard Gateway&#xff1a;物联网设备数据采集与集成的强大解决方案 随着物联网&#xff08;IoT&a…...

什么是镜像/raid

镜像&#xff08;Mirroring&#xff09;是一种文件存储形式&#xff0c;是冗余的一种类型&#xff0c;一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。可以把许多文件做成一个镜像文件&#xff0c;与GHOST等程序放在一个盘里用GHOST等软件打开后&#xff0c;又…...

【Python】如何有效比较两个时间序列在图形上的相似度?

文章目录前言一、1.准备二、实操1.使用Matplotlib可视化比较两个时间序列2.计算两个时间序列的相关系数&#xff1a;3.使用Python实现动态时间规整算法&#xff08;DTW&#xff09;&#xff1a;总结前言 比较两个时间序列在图形上是否相似&#xff0c;可以通过以下方法&#x…...

JavaEE-常见的锁策略和synchronized的锁机制

目录常见的锁策略乐观锁和悲观锁轻量级锁和重量级锁自旋锁和挂起等待锁普通互斥锁和读写锁公平锁和非公平锁可重入锁和不可重入锁synchronized的锁机制synchronized特性锁升级/锁膨胀锁消除锁粗化常见的锁策略 乐观锁和悲观锁 乐观锁和悲观锁主要是看主要是锁竞争的激烈程度.…...

信息化,数字化,智能化是三种不同的概念吗?

前两年流行“信息化”&#xff0c;网上铺天盖地都是关于“信息化”的文章&#xff0c;这两年开始流行起“数字化”&#xff0c;于是铺天盖地都是“数字化”的文章。&#xff08;这一点从数字化和信息化这两个关键词热度趋势就可以看出来&#xff09;。 但点开那些文章仔细看看…...

【华为OD机试 2023最新 】 匿名信(C++ 100%)

题目描述 电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字减下来,剪拼成匿名信。 现在又一名举报人,希望借鉴这种手段,使用英文报刊完成举报操作。 但为了增加文章的混淆度,只需满足每个单词中字母数量一致即可,不关注每个…...

硬件语言Verilog HDL牛客刷题day05 时序逻辑部分

1.VL29 信号发生器 1.题目&#xff1a; 题目描述&#xff1a; 请编写一个信号发生器模块&#xff0c;根据波形选择信号wave_choise发出相应的波形&#xff1a;wave_choice0时&#xff0c;发出方波信号&#xff1b;wave_choice1时&#xff0c;发出锯齿波信号&#xff1b;wave…...

Ajax 入门

前端技术&#xff1a;在浏览器中执行的程序都是前端技术。如 html、css、js 等 后端技术&#xff1a;在服务器中执行的长须&#xff0c;使用 Java 等语言开发的后端程序。servlet&#xff0c;jsp&#xff0c;jdbc&#xff0c;mysql&#xff0c;tomacat 等 全局刷新 使用表单…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...