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

ABC424A-E题解

比赛链接

A题

这一道题给你三条边的长度,问你这个组成的三角形是不是等腰三角形.那么我们只需分别判断是否有两个或更多数相等即可.

#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b,c;
signed main(){cin>>a>>b>>c;if(a==b||a==c||b==c) cout<<"Yes";else cout<<"No";return 0;
}

B题

说白了这题按先后顺序告诉你哪个人做了哪道题,你需要按照AK的先后顺序输出AK的人.我们只需要维护一个数组表示一个人做了几道题即可.

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=15;
int n,m,k,x,y,sl[N];
int t[N][N];
signed main(){cin>>n>>m>>k;for(int i=1;i<=k;i++){cin>>x>>y;if(!t[x][y]){t[x][y]=1,sl[x]++;}if(sl[x]==m){cout<<x<<' ';}}return 0;
}

C题

这种给你先后顺序的题往往就是拓扑排序.这道题的特殊点是只要有一个学过的就可以学,所以入度全部要设为1.然后我们进行传统的BFS模拟拓扑就可以了.

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int n,l[N],r[N],sl,in[N];
queue<int>q;
vector<int>v[N];
signed main(){cin>>n;for(int i=1;i<=n;i++){cin>>l[i]>>r[i];v[l[i]].push_back(i);v[r[i]].push_back(i);if(l[i]!=0||r[i]!=0) in[i]=1;}for(int i=1;i<=n;i++){if(!in[i]) q.push(i), sl++;}while(q.size()){int t=q.front();q.pop();for(int i=0;i<v[t].size();i++){int u=v[t][i];in[u]--;if(!in[u]) q.push(u), sl++;}}cout<<sl;return 0;
}

D题

这一道题会给你一个网格,要求你把这个网格中所有的黑色2*2的小方块都消除掉.你可以切换一个方块的颜色.

对于这道题我们考虑剪枝+DFS.首先我们构建一下DFS为第x行第y列改了k次.首先如果搜索到的方块为白色我们肯定是不改的,毕竟你该他干嘛.如果是黑色我们要分类讨论.我们把这个方块默认为潜在黑色小方块的右下角,因此如果他的上面,左边和左上方有一个是白色它就可以不变色.否则我们必须修改.

如果只是这样我们会死得很惨.我们需要剪枝.注意到我们可以维护一个最小操作次数,如果一次搜索超过这个次数直接停止就行.这样复杂度就足够了.

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=10;
int t,n,m,mi;
char a[N][N];
void dfs(int x, int y, int u){if(u>mi) return;if(y==m+1) x++, y=1;if(x==n+1){mi=min(mi,u);return;}if(a[x][y]=='.'){dfs(x,y+1,u);return;}if(x==1||y==1||a[x-1][y]=='.'||a[x][y-1]=='.'||a[x-1][y-1]=='.') dfs(x,y+1,u);a[x][y]='.';dfs(x,y+1,u+1);a[x][y]='#';
}
signed main(){cin>>t;while(t--){cin>>n>>m, mi=(1e9);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}dfs(1,1,0), cout<<mi<<'\n';}return 0;
}

E题

E让你操作k次,每次会把最长的棍子切成两端再丢回堆里.最后求这一堆棍子中第X打的棍子.

我们维护一个优先队列,维护长度以及数量.我们分批减,每次把开头,也就是最大的那一批棍子取出来,尽可能把他们切开.如果要切的总数超过他们的数量就往优先队列里丢入一半长度但两倍数量的棍子,否则我们切一些.我们查第X大的思路大致相同,不赘述.

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int t,n,k,x,a[N];
struct node{double len;int num;bool operator < (const node &u) const{return u.len>len;}
};
priority_queue<node>q;
signed main(){cin>>t;while(t--){cin>>n>>k>>x;while(q.size()) q.pop();for(int i=1;i<=n;i++) cin>>a[i], q.push({a[i],1});while(k){double l=q.top().len;int n=q.top().num;q.pop();if(k>=n){k-=n, q.push({l/2,n*2});}else{q.push({l/2,k*2});q.push({l,(n-k)});k=0;}}while(x){double l=q.top().len;int n=q.top().num;q.pop(), x-=n;if(x<=0){cout<<fixed<<setprecision(18)<<l<<'\n';break;}}}return 0;
}

http://www.dtcms.com/a/399976.html

相关文章:

  • 基于深度学习的双对数坐标曲线转折点识别方法研究
  • 部门网站建设管理制度网站开发部署
  • 孟庆涛:GEO 三大趋势工具到生态,构建生成式 AI 时代的认知主权
  • 如何建一个公司网站WordPress不显示斜杠
  • 家政公司网站建设方案网站建设捌金手指下拉六
  • 北京超市网站建设孝感的网站建设
  • 中国精品课程网站湖南省郴州市有几个县
  • 非参数方法:数据驱动时代 “无分布约束” 的分析利器 —— 技术实践与方法论升华
  • Python typing库的应用与优缺点
  • STM32与7038芯片通过SPI通信读取寄存器数据
  • 跨部门设计评审不足常见的问题有哪些
  • PyTorch 模型构建
  • 网站如何建设与安全管理制度网站建设跟版网
  • Spring Cloud Alibaba快速入门-Sentinel流量控制(FlowRule)
  • 给你一个网站seo如何做百度ai人工智能
  • 网站建设实验步骤盘锦网站建设流程
  • UNet改进(40):CrossTemporalUNet在3D时序数据处理中的应用
  • 计算机组成原理:时序产生器和控制方式
  • 写作助手系统:AI辅助内容创作的技术实现
  • 网站开发完整视频网站做填充
  • 医院 网站后台管理asp网站建设外文参考文献
  • FMCW雷达:从理论到MATLAB GNU Radio双平台验证
  • 每日精讲:⼆叉树的构建及遍历/⼆叉树的前中后序遍历
  • 教人如何做吃的网站wordpress更改主题名
  • 网站和网页的区别在于o2o模式举例说明
  • 大概在网上建立一个网站一年要花多少钱呀微商网
  • 做网站服务好福州外贸网站建设推广
  • NAND FLASH与NOR FLASH
  • 有什么好的网站推荐一下私域流量运营
  • 新网站如何做排在前面给卖假性药的做网站一般要判多久