AtCoder Beginner Contest 333

A

题意

输出n个n(n<=9)

代码

#include<bits/stdc++.h>
using namespace std;
void solve(){int n;cin>>n;for(int i=1;i<=n;i++)cout<<n;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

B

题意

给定一个正五边形ABCDE,现在给定两条边问两条边是否相等

思路

在正五边形里面边长分为两类,一类是相邻的节点连边(如AB,BC,CD,DE,EA),另一类是不相邻的节点连边(如AC,AD,BD,BE,CE)如果两条边处在同一类中则边长相等

代码

#include<bits/stdc++.h>
using namespace std;
void solve(){string line1,line2;cin>>line1>>line2;int len1=abs(line1[1]-line1[0]);int len2=abs(line2[1]-line2[0]);if(len1==len2)cout<<"Yes\n";else if((len1+len2)%5==0)cout<<"Yes\n";else cout<<"No\n";
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

C

题意

一个集合A中有{1,11,111,1111,…},需要在集合A中选出三个数(可以相同)相加后组成一个新的数x,将x放入集合B中,集合B内部按照从小到大的顺序排列,问集合中第N小的元素是什么

思路

直接暴力三层循环选出三个元素相加后放入数组中,然后对整个数组排序即可

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){vector<int>res;for(int i=1;i<=1e18;i=10*i+1){for(int j=i;j<=1e18;j=10*j+1){for(int k=j;k<=1e18;k=10*k+1){res.push_back(i+j+k);}}}sort(res.begin(),res.end());int x;cin>>x;cout<<res[x-1]<<"\n";
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

D

题意

给定一棵树,每次可以删除一个叶子节点及其相连边,问至少需要删多少次才能删除节点1

思路

如果1是叶子节点,那么可以直接1步删除

考虑整棵树以1为根,如果要使得1号节点被删除,就意味着要删到1号节点为叶子节点的时候,那么对于1号节点的所有儿子节点为根的子树来说,这些子树最多只能保留一个,剩余的子树上的节点需要全部删除,考虑到删除节点要最小,所以我们保留1号节点的儿子节点中最大的那一棵子树即可。求子树大小简单写一个dfs即可

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(如图:子树1>子树3>子树4>子树2,那么最优方案 一定是把子树1保留,剩下所有子树上的节点全部删除)

代码

#include<bits/stdc++.h>
using namespace std;
const int mxn=1e6+5;
int siz[mxn];
vector<int>edge[mxn];
void dfs(int u,int fa){siz[u]=1;for(auto v:edge[u]){if(v==fa)continue;dfs(v,u);siz[u]+=siz[v];}
}
void solve(){int n;cin>>n;for(int i=1;i<n;i++){int u,v;cin>>u>>v;edge[u].push_back(v);edge[v].push_back(u);}dfs(1,0);int res=n-1;for(auto v:edge[1])res=min(res,n-siz[v]);cout<<res<<"\n";
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

E

题意

Takahashi在冒险中遇到N个事件,每个事件由(op,x)组成,如果op=1说明这个地方有一瓶类型为x的药水,如果op=2说明遇到怪物并且需要用x类型药水才能打败他,否则会被打败

问在满足不被怪物打败的前提下,需要用背包装药水,问背包的容量最小为多少

思路

考虑贪心,每瓶药在打怪之前最后出现位置才会拿。那么我们只需要从最后往前找即可

代码

#include<bits/stdc++.h>
using namespace std;
void solve(){int n;cin>>n;vector<pair<int,int>>a(n+10);for(int i=1;i<=n;i++)cin>>a[i].first>>a[i].second;vector<int>now(n+10,0);//在这之前需要取的药vector<int>vis(n+10,0);//是否取for(int i=n;i>=1;i--){if(a[i].first==2)now[a[i].second]++;else{if(now[a[i].second]>=1)now[a[i].second]--,vis[i]=1;}}for(int i=1;i<=n;i++){if(now[i]>0){cout<<"-1\n";return;}}int maxv=0,nowv=0;//最大容量for(int i=1;i<=n;i++){if(a[i].first==1)nowv+=vis[i];else nowv--;maxv=max(maxv,nowv);}cout<<maxv<<"\n";for(int i=1;i<=n;i++){if(a[i].first==1)cout<<vis[i]<<" ";}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

F

题意

有序号为1,2…n号人在排队, 每一次对队首的人进行操作,队首的人有1/2的概率出队,还有1/2的概率回到队尾,问第i个人是最后一个留在队列中的概率

思路

消元类概率 dp 经典问题

我们发现实际上无论队伍里面的人序号是什么,我们只关心当前队列中有多少个人,最后胜出的是排在第几个位置上的人

先考虑我们当前知道什么?我们知道如果队列中只有一个人,那么他必胜

再考虑我们需要求什么?在有n个人的队伍中每个位置上的人获胜的概率

所以我们现在已知最后的结束状态值,我们想求初始状态的值

因为操作可逆,所以我们可以把题意改成每一次有1/2的概率在队首加上一个人,有1/2的概率将队尾元素放到队首。那么我们就可以很顺其自然的推状态

dp[i][j]dp[i][j]dp[i][j]为当前中有i个人,其中第j个人最后胜利的概率

在这里插入图片描述

那么就有转移方程dp[i][j]=12×dp[i−1][j−1]+12×dp[i][j−1]dp[i][j]=\frac {1}{2}\times dp[i-1][j-1]+\frac {1}{2}\times dp[i][j-1]dp[i][j]=21×dp[i1][j1]+21×dp[i][j1]

(当前状态可以是原先状态在队首加上一个人,也可以是将队尾的人放到队首得到的)

但我们会发现这样转移有一个位置不对,如果我们当前要求的是队伍中第一个人获胜的概率(即求dp[i][1]),那么这个人显然不可能是从原先第0个人转移过来的(dp[i-1][j-1]=dp[i-1][0]=0),而是从队尾移到队首的(即是从dp[i][i])转移过来的(在实际的意义中我们其实也不难发现队首的这个人出队以后就不会对后续队列中的人产生影响)

所以最终的转移方程应该为
dp[i][j]={12×dp[i−1][j−1]+12×dp[i][j−1](j≠1)12×dp[i][i](j=1)dp[i][j]= \begin{cases} \frac {1}{2}\times dp[i-1][j-1]+\frac {1}{2}\times dp[i][j-1]&(j\neq 1) \\ \frac {1}{2}\times dp[i][i]&(j=1) \end{cases} dp[i][j]={21×dp[i1][j1]+21×dp[i][j1]21×dp[i][i](j=1)(j=1)
状态转移方程的确定仅仅是开始

我们意识到这个转移方程不满足无后效性的递推条件

因为在转移中dp[i][1]需要用到dp[i][i]的状态,dp[i][2]要用到dp[i][1]的状态…dp[i][i]要用到dp[i][i-1]的状态,那么很成功的一下子整层状态都锁住了

但我们发现成环的部分i都相同,也就是说是在同一层的状态,我们能否假定一个当前未知的状态的值把环上所有状态表示出来?

答案是肯定的

假定dp[i][1]是已知条件,则有
{dp[i][1]=dp[i][1]dp[i][2]=dp[i−1][1]2+dp[i][1]2dp[i][3]=dp[i−1][2]2+dp[i][2]2=dp[i−1][2]2+dp[i−1][1]2+dp[i][1]22=dp[i−1][2]2+dp[i−1][1]4+dp[i][1]4....dp[i][i]=dp[i−1][i−1]2+dp[i−1][i−2]4+dp[i−1][i−3]8+....+dp[i−1][1]2i−1+dp[i][1]2i−1\begin{cases} dp[i][1]=dp[i][1] \\ dp[i][2]=\frac {dp[i-1][1]}{2}+\frac {dp[i][1]}{2} \\ dp[i][3]=\frac {dp[i-1][2]}{2} +\frac {dp[i][2]}{2}=\frac {dp[i-1][2]}{2}+\frac {\frac {dp[i-1][1]}{2}+\frac {dp[i][1]}{2}}{2}=\frac {dp[i-1][2]}{2}+\frac {dp[i-1][1]}{4}+\frac {dp[i][1]}{4} \\ .... \\ dp[i][i]=\frac {dp[i-1][i-1]}{2}+\frac {dp[i-1][i-2]}{4}+\frac {dp[i-1][i-3]}{8}+....+\frac {dp[i-1][1]}{2^{i-1}}+\frac {dp[i][1]}{2^{i-1}} \end{cases} dp[i][1]=dp[i][1]dp[i][2]=2dp[i1][1]+2dp[i][1]dp[i][3]=2dp[i1][2]+2dp[i][2]=2dp[i1][2]+22dp[i1][1]+2dp[i][1]=2dp[i1][2]+4dp[i1][1]+4dp[i][1]....dp[i][i]=2dp[i1][i1]+4dp[i1][i2]+8dp[i1][i3]+....+2i1dp[i1][1]+2i1dp[i][1]

又因为 dp[i][1]=12×dp[i][i]所以就有 dp[i][1]=dp[i−1][i−1]4+dp[i−1][i−2]8+dp[i−1][i−3]16+⋯+dp[i−1][1]2i+dp[i][1]2i即 dp[i][1]=∑k=1i−112i−k+1×dp[i−1][k]+dp[i][1]2i移项后得到 (2i−1)×dp[i][1]=2i×∑k=1i−112i−k+1×dp[i−1][k]即 dp[i][1]=2i2i−1×∑k=1i−112i−k+1×dp[i−1][k]\begin{aligned} &\text{又因为 } dp[i][1] = \frac{1}{2} \times dp[i][i] \\ &\text{所以就有 } dp[i][1] = \frac{dp[i-1][i-1]}{4} + \frac{dp[i-1][i-2]}{8} + \frac{dp[i-1][i-3]}{16} + \cdots + \frac{dp[i-1][1]}{2^i} + \frac{dp[i][1]}{2^i} \\ &\text{即 } dp[i][1] = \sum_{k=1}^{i-1} \frac{1}{2^{i-k+1}} \times dp[i-1][k] + \frac{dp[i][1]}{2^i} \\ &\text{移项后得到 } (2^i - 1) \times dp[i][1] = 2^i \times \sum_{k=1}^{i-1} \frac{1}{2^{i-k+1}} \times dp[i-1][k] \\ &\text{即 } dp[i][1] = \frac{2^i}{2^i - 1} \times \sum_{k=1}^{i-1} \frac{1}{2^{i-k+1}} \times dp[i-1][k] \end{aligned} 又因为 dp[i][1]=21×dp[i][i]所以就有 dp[i][1]=4dp[i1][i1]+8dp[i1][i2]+16dp[i1][i3]++2idp[i1][1]+2idp[i][1] dp[i][1]=k=1i12ik+11×dp[i1][k]+2idp[i][1]移项后得到 (2i1)×dp[i][1]=2i×k=1i12ik+11×dp[i1][k] dp[i][1]=2i12i×k=1i12ik+11×dp[i1][k]

经过这么一番处理我们发现,每一层的dp[i][1]实际上只和i-1层的状态有关,所以可以直接处理出来

那么已知dp[i][1]的状态,第i层的所有状态也就可以递推处理出来了

至此我们可以将转移方程更新为:
dp[i][j]={12×dp[i−1][j−1]+12×dp[i][j−1](j≠1)2i2i−1×∑k=1i−112i−k+1×dp[i−1][k]dp[i][j]= \begin{cases} \frac {1}{2}\times dp[i-1][j-1]+\frac {1}{2}\times dp[i][j-1]&(j\neq 1) \\ \frac{2^{i}}{2^{i}-1}\times\sum _{k=1}^{i-1}{\frac{1}{2^{i-k+1}}\times dp[i-1][k]} \end{cases} dp[i][j]={21×dp[i1][j1]+21×dp[i][j1]2i12i×k=1i12ik+11×dp[i1][k](j=1)
初始已知dp[1][1]=1dp[1][1]=1dp[1][1]=1,最后要求的是f[n][1],f[n][2],f[n][3]......f[n][n]f[n][1],f[n][2],f[n][3]......f[n][n]f[n][1],f[n][2],f[n][3]......f[n][n]

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353,mxn=3e3+5;
int dp[mxn][mxn];
int fastpow(int a,int power=mod-2){int res=1;while(power){if(power&1)res=res*a%mod;a=a*a%mod;power>>=1;}return res;
}
int inv(int x){return fastpow(x);}
void solve(){int n;cin>>n;int inv2=inv(2);dp[1][1]=1;for(int i=2;i<=n;i++){for(int k=1;k<=i-1;k++)dp[i][1]+=inv(fastpow(2,i-k+1))*dp[i-1][k]%mod,dp[i][1]%=mod;//先求dp[i][1]dp[i][1]=dp[i][1]*fastpow(2,i)%mod*inv((fastpow(2,i)-1+mod)%mod)%mod;for(int j=2;j<=i;j++)dp[i][j]=(inv2*dp[i-1][j-1]%mod+inv2*dp[i][j-1]%mod)%mod;}for(int i=1;i<=n;i++)cout<<dp[n][i]<<" ";
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88565.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88565.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88565.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

留学真相:凌晨两点被海关拦下时,我才明白人生没有退路

> 独立不是选择&#xff0c;而是生存的必修课下飞机那一刻&#xff0c;幻想中的“镀金生活”瞬间崩塌。伦敦海关凌晨两点的灯光下&#xff0c;你颤抖着翻找学校文件&#xff0c;手机信号格空空如也&#xff1b;大巴误点后&#xff0c;你拖着两个32公斤的行李箱站在阴雨中&am…

探索AIGC领域DALL·E 2的图像生成与人类创意的融合

探索AIGC领域DALLE 2的图像生成与人类创意的融合关键词&#xff1a;AIGC、DALLE 2、图像生成、人类创意、创意融合摘要&#xff1a;本文聚焦于AIGC领域中DALLE 2的图像生成技术与人类创意的融合。首先介绍了相关背景&#xff0c;包括DALLE 2的发展历程和人类创意在艺术创作中的…

【ECharts】多个ECharts版本共存解决方案

多个ECharts版本共存解决方案 在单个HTML页面中使用多个ECharts版本的关键在于避免全局命名空间冲突。下面我将展示一个完整的解决方案&#xff0c;包含两种不同的实现方法。 解决方案思路命名空间隔离法&#xff1a; 使用不同的全局变量名保存不同版本的ECharts在加载新版本前…

力扣热门算法题 204.计数质数,207.课程表,213.打家劫舍II

力扣热门算法题 204.计数质数&#xff0c;207.课程表&#xff0c;213.打家劫舍II&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2025.07.07 可通过leetcode所有测试用例。 目录 204.计数质数 解题思路 完整代码 207.课程表 解题思…

深入理解 macOS 的 quarantine、xattr 与 Gatekeeper

在 macOS 上安装第三方应用时&#xff0c;你是否遇到过如下提示&#xff1f; “xxx.app 已损坏&#xff0c;无法打开。”“无法打开‘xxx.app’&#xff0c;因为它来自身份不明的开发者。”“你确定要打开这个应用吗&#xff1f;它是从互联网下载的。” 这些提示背后&#xff0…

FastAPI学习笔记记录

FastAPI 学习笔记 最近在公司中需要写接口&#xff0c;选取了fastapi这个框架&#xff0c;一个原因是FastAPI 是主流框架&#xff0c;同时FastAPI 有着高性能&#xff0c;支持异步和高并发。 FastAPI 安装 直接用下面两行命令进行安装 pip3 install fastapi pip install uvicor…

HTML(上)

1.web标准主要包括结构(Structure)、表现(Presentation)和行为(Behavior)三个方面。1.1 结构结构用于对网页元素进行整理和分类&#xff0c;核心技术&#xff1a;HTML。 HTML (HyperText Markup Language)&#xff1a;超文本标记语言&#xff0c;用于定义网页的内容和结构&…

杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析

杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析 文章目录杭州乐湾科技有限公司的背景、产品体系与技术能力的全方位深度分析**一、公司背景&#xff1a;智慧养老赛道领跑者****1. 基础信息****2. 发展里程碑****二、产品体系&#xff1a;全域智慧养老解决方案…

kettle从入门到精通 第101课 ETL之kettle DolphinScheduler调度kettle

1、下载DolphinSchedulerDolphinScheduler官网下载安装包&#xff0c;选择合适的版本进行下载&#xff0c;地址为https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9/guide/installation/standalone2、启动 DolphinScheduler Standalone Server我这里仅仅为了测试使用&…

微信小程序121~130

1.小程序功能开发-首页功能 通过并发请求获取首页的数据。 // 导入封装的网络请求模块实例 import http from ../utils/http // 定义接口api函数 export const reqIndexData () > {// 通过方式请求并获取首页数据&#xff0c;提升页面渲染速度// 通过Promise.all进行并发请…

Java Stream流:高效数据处理全解析

Java Stream 流详解 Stream 是 Java 8 引入的 API&#xff0c;用于高效处理集合数据&#xff08;如 List、Set、Map 等&#xff09;。它支持函数式编程风格&#xff0c;能实现复杂的查询、过滤、映射等操作&#xff0c;并支持并行处理以提升性能。核心特点 非存储数据结构&…

光子精密双目3D线激光轮廓测量仪,摆脱视觉盲区,1台更比2台强!

光子精密双目3D线激光轮廓测量仪&#xff08;GL-8160D&#xff09;&#xff0c;在GL-8000系列的基础上创新升级。GL-8160D采用全新双目单线设计&#xff0c;突破传统3D视觉检测限制&#xff0c;而且不受外部拼接标定误差影响&#xff0c;有效消除单目盲区&#xff0c;抗光干扰能…

基于Linux驱动的可见光通信方案 —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门&#xff08;附 BeagleBone Black 及驱动解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的开源可见光通信&#xff08;VLC / Li-Fi&#xff09;研究平台。它把硬件、驱动、协议栈…

Git系列--4.Git分支设计规范

目录 一、了解开发环境 1.1概念阐述 1.2系统概括图 二、设计规范之GitFlow模型 2.1具体分支概念 2.1.1master 分⽀ 2.1.2release 分⽀ 2.1.3develop 分⽀ 2.1.4feature 分⽀ 2.1.5hotfix 分⽀ 2.2宏观表格 三、分支流程图 一、了解开发环境 1.1概念阐述 对于开发人员…

【时间之外】AI在农机配件设计场景的应用

目录 农机制造业痛点 AI场景畅想 落后就要挨打 农机制造业痛点 最近&#xff0c;我与一位在制造业摸爬滚打多年的老友相聚。酒过三巡&#xff0c;话题渐渐转到他的事业上。他兴致勃勃地跟我讲起&#xff0c;自己正主导着一个规模达几千万的项目&#xff0c;生产基地远在孟加…

基于定制开发开源AI智能名片与S2B2C商城小程序的旅游日志创新应用研究

摘要&#xff1a;本文探讨了旅游日志在记录旅行美景与人物中的重要性&#xff0c;结合当下数字化发展趋势&#xff0c;引入定制开发开源AI智能名片与S2B2C商城小程序的概念。分析如何将这两者与旅游日志风格元素相融合&#xff0c;打造一种创新的旅游记录与分享模式&#xff0c…

XGBoosting算法详解(Boosting思想的代表算法)

文章目录相关文章一、Boosting思想&#xff1a;从弱到强的串行提升二、XGBoost算法思想&#xff1a;GBDT的极致优化三、XGBoost数学原理&#xff1a;从目标函数到树分裂3.1 目标函数定义3.2 正则化项&#xff1a;控制树的复杂度3.3 泰勒二阶展开&#xff1a;简化目标函数3.4 化…

Vue + Element UI 实现选框联动进而动态控制选框必填

目录 一. 需求描述 二. 解决思路 三. 代码实现 四. 效果展示 一. 需求描述 如下图所示&#xff0c;新增人员页面&#xff0c;有字段"Leader DS"和"Leader DS名称"。 现在我要在字段"Leader DS"和"Leader DS名称"字段下方再添加一…

高通SG882G平台(移远),Ubuntu22编译:1、下载代码

不要使用Ubuntu24&#xff0c;不稳定。 docker听着美好&#xff0c;其实也有问题。比如你给别人的时候&#xff0c;虚拟机直接给过去&#xff0c;马上就能用。 安装工具 sudo apt-get install -y \ diffstat xmlstarlet texinfo chrpath gcc-aarch64-linux-gnu libarchive-d…

Android音视频探索之旅 | C++层使用OpenGL ES实现视频渲染

一.前言 在学习音视频的过程中&#xff0c;实现视频渲染是非常常见的&#xff0c;而渲染的方式也挺多&#xff0c;可以使用Java层的OpenGL ES进行图形渲染&#xff0c;也可以使用Ffmpeg来显示&#xff0c;还有就是通过C层的OpenGL ES来进行渲染。OpenGL ES是OpenGL三维图形API…