牛客小白月赛112
牛客小白月赛112
2025.03.23
A 智乃的天平
题目简介:简单的瞪眼题
思路:
枚举天平的各种情况即可
几分钟就AC了
B 智乃爬山
题目简介:模拟,用数组实现
秒了的水题
C 智乃放球
题目简介:思维
注意点:
1.消除的球的个数是桶的容量的倍数
(n-q)%k==0
2.剩余的球的个数最大为m*(k-1);
q<=m*(k-1)
3.ans结果开long long
D 智乃的“K”叉树
题目简介:虽以树为背景,但考察的是问题的分析能力,与树关系不大
注意点:
1.分析样例,发现将某个节点定为根节点时,其出度等于孩子数,其余节点的出度减一为孩子数
2.由此产生的贪心思想:选择出度不是最大的结点中编号最小的节点
3.特判所有节点出度一样的情况
E 智乃的“凑数”题(Easy Version)
题目简介:dfs暴力剪枝,或dp的01背包问题,其中有很多细节
思路:
1.通过对题干的分解,行列和的乘积,不难想到对每次问询先枚举因数,再在因数里找结果
2.而把找到因数后,需要判断是否为需求状态,因此我们可以dp动规来表示每个状态
- bool类型的dp[i][j]表示行和为i,列和为j是否可行
- 零一背包,需要倒推,否则会出现一个数使用多次的情况,也就错误的变成完全背包
- 对于每种状态,一旦确定就可以continue,而递推过程中,顺便用pre[x][y]记录(x,y)的前驱状态和本状态的差值,对应输出行和列的内容,这里,用正数代表x维度的差值,用负数代表y维度的差值
dp[0][0]=1;
for(int i = 1;i<=n;i++){
for(int x=100;x>=0;x--){
for(int y=100;y>=0;y--){
if(dp[x][y]) continue;
if(x>=a[i]&&dp[x-a[i]][y]){
dp[x][y]=1;
pre[x][y]=a[i];
}
else if(y>=a[i]&&dp[x][y-a[i]]){
dp[x][y]=1;
pre[x][y]=-a[i];
}
}
}
}
3.找到需求状态后,回溯前驱状态,并把回溯过程存入vector
for(int i =1;i<=ceil(sqrt(q));i++){
if(q%i!=0)continue;
if(dp[i][q/i]){
vector<int>vx,vy;
int x = i,y =q/i;
while(x!=0||y!=0){
if(pre[x][y]>0){
vx.push_back(pre[x][y]);
x-=pre[x][y];
}
else{
vy.push_back(-pre[x][y]);
y+=pre[x][y];
}
}
cout<<"Yes"<<endl;
4.遍历vector并按照格式输出答案
cout<<vx.size()<<" "<<vy.size()<<endl;
for(int j = 0;j<vx.size();j++) cout<<vx[j]<<" ";
cout<<endl;
for(int j = 0;j<vy.size();j++) cout<<vy[j]<<" ";
cout<<endl;
return ;
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法