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

Codeforces Round 993 (Div. 4)题解

A. Easy Problem

思路:经过看了一眼,我们发现,a+b的和一定是n,且两个都是正整数,

所以a的范围就是从1~n-1 

所以输出n-1即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a,b;
string s; 
void solve()
{cin>>n;cout<<n-1<<"\n";
}signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>t;while(t--)solve();return 0;
}

B. Normal Problem

思路:稍加思索一下就发现,其实从里面看的话,就是将字符串翻转之后,将p变成q,将q变成p

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a,b;
string s; 
void solve()
{cin>>s;for(int i=0;i<s.size();i++){if(s[i]=='p'){s[i]='q';}else if(s[i]=='q'){s[i]='p';}}reverse(s.begin(),s.end());cout<<s<<"\n";
}signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>t;while(t--)solve();return 0;
}

 C. Hard Problem

思路:第一排尽量都坐满a,第二排尽量坐满b,然后空的用c补全,直到座位为0,或者c没有了

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a,b,c;
string s; 
void solve()
{cin>>n>>a>>b>>c;int ans=0;cout<<min(a,n)+min(b,n)+min(c,max(n-a,0LL)+max(n-b,0LL))<<"\n";
}signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>t;while(t--)solve();return 0;
}

 D. Harder Problem

思路:我们有n个位置放数,那我们就按照123...n这种情况放数,这样每个数只出现一次,都可以作为模数,但是,要注意数出现的顺序,所以我们出现一个新的就输出当前这个数,然后遍历1~n看哪个数还没出现过,没出现则输出

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[200005];
void solve()
{cin>>n;int vis[200005];memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){cin>>a[i];if(vis[a[i]]==0)vis[a[i]]=1,cout<<a[i]<<" ";}for(int i=1;i<=n;i++){if(vis[i]==0)cout<<i<<" ";}cout<<"\n";
}signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>t;while(t--)solve();return 0;
}

 E. Insane Problem

 思路:我们发现,若要y/x为k的次方,那我们不断将后面那个区间缩小,直到后面的右区间小于前面这个区间的左区间位置,不断计算两个区间的重复大小即可,但是要注意,缩小区间的时候,右端点要向下取整,左端点向上取整

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int k,a,b,c,d;
void solve()
{cin>>k>>a>>b>>c>>d;int flag=1;int ans=0;while(d>=a){int num=min(b,d)-max(a,c)+1;if(num<=0){num=0;}ans+=num;d/=k;c=(c+k-1)/k;}cout<<ans<<"\n";
}signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>t;while(t--)solve();return 0;
}

F. Easy Demon Problem

思路:我们自己手玩一下就发现了一个规律,整个M矩阵的美观值为列的累加和*行的累加和 

因此,我们可以去统计每个数是否出现过,出现过则标记为1,然后去判断是否出现过来输出YES或者NO,但是呢,不加剪枝的话时间复杂度就太高了,我们要将其中的大于N的部分全部去掉,这样时间复杂度为O(N根号N)

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,m,q;
const int N=200000;
int a[200005];
int b[200005];
int suma;
int sumb;
bool visa[400005];
bool visb[400005];
bool ans[400005];
void solve()
{cin>>n>>m>>q;suma=0,sumb=0;for(int i=1;i<=n;i++){cin>>a[i];suma+=a[i];}for(int i=1;i<=m;i++){cin>>b[i];sumb+=b[i];}int num=0;for(int i=1;i<=n;i++){num=suma-a[i];if(abs(num)<=N){visa[N+num]=true;}}for(int i=1;i<=m;i++){num=sumb-b[i];if(abs(num)<=N){visb[N+num]=true;}}for(int i=1;i<=N;i++){for(int j=1;j*i<=N;j++){ans[N+i*j]|=visa[N+i]&&visb[N+j];ans[N+i*j]|=visa[N-i]&&visb[N-j];ans[N-i*j]|=visa[N+i]&&visb[N-j];ans[N-i*j]|=visa[N-i]&&visb[N+j];}}while (q--){int x;cin >> x;x += N;if (ans[x])cout << "YES\n";elsecout << "NO\n";}
}signed main()
{solve();return 0;
}

 G1. Medium Demon Problem (easy version)

 思路:我们发现,只有强连通分量内的蜘蛛能够保持稳定,所以我们要输出的就是缩点后的最长的链然后+1就是最终答案

#include<bits/stdc++.h>  
using namespace std;  
#define int long long
int t;
int n;
vector<int> e[200005];
int dfn[200005];
int low[200005];
int len=0;
stack<int> s;
int vis[200005];
vector<int> scc[200005];
int cnt;
int dp[200005];
void ini()
{for(int i=1;i<=n;i++){e[i].clear();dfn[i]=low[i]=0;dp[i]=0;vis[i]=0;scc[i].clear();}len=0;cnt=0;
}
void tarjan(int v)
{dfn[v]=low[v]=++len;s.push(v);vis[v]=1;for(int u:e[v]){if(dfn[u]==0){tarjan(u);low[v]=min(low[v],low[u]);}else if(vis[u]==1){low[v]=min(low[v],dfn[u]);}}int u;if(low[v]==dfn[v]){cnt++;do{u=s.top();s.pop();vis[u]=0;scc[cnt].push_back(u);}while(u!=v);}
}
void solve() 
{cin>>n;vector<int> a(n+1);for(int i=1;i<=n;i++){cin>>a[i];e[i].push_back(a[i]);}for(int i=1;i<=n;i++){if(dfn[i]==0){tarjan(i);}}int ans=0;for(int i=1;i<=cnt;i++){if(scc[i].size()>1){for(int u:scc[i]){dp[u]=1;}ans=max(ans,1LL);}else{dp[scc[i][0]]=dp[a[scc[i][0]]]+1;ans=max(ans,dp[scc[i][0]]);}}cout<<ans+1<<"\n";;ini();
}
signed main() 
{  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);  cin >> t;  while (t--) {  solve();  }  return 0;  
}

G2. Medium Demon Problem (hard version)

因为每个蜘蛛可以保留多个,所以算的应当是除了强连通分量外的子树的最大值+1

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n;
vector<int> e[200005];
int dfn[200005];
int low[200005];
int len;
stack<int> s;
int vis[200005];
vector<int> scc[200005];
int pos[200005];
int cnt;
int dp[200005];
void ini()
{for(int i=1;i<=n;i++){e[i].clear();dfn[i]=low[i]=0;dp[i]=0;vis[i]=0;pos[i]=0;scc[i].clear();}len=0;cnt=0;
}
void tarjan(int v)
{dfn[v]=low[v]=++len;s.push(v);vis[v]=1;for(int u:e[v]){if(dfn[u]==0){tarjan(u);low[v]=min(low[v],low[u]);}else if(vis[u]==1){low[v]=min(low[v],dfn[u]);}}int u;if(dfn[v]==low[v]){cnt++;do{u=s.top();s.pop();vis[u]=0;scc[cnt].push_back(u);pos[u]=cnt;}while(u!=v);}
}
void solve()
{cin>>n;vector<int> a(n+1);for(int i=1;i<=n;i++){cin>>a[i];e[i].push_back(a[i]);}for(int i=1;i<=n;i++){if(dfn[i]==0){tarjan(i);}}int ans=0;for(int i=1;i<=cnt;i++){dp[i]=1;if(scc[i].size()>1) dp[i]=0;}for(int i=cnt;i>=1;i--){if(scc[i].size()==1){int u=a[scc[i][0]];if (scc[pos[u]].size()==1) {dp[pos[u]]+=dp[i];} else {dp[pos[u]]=max(dp[pos[u]],dp[i]);}} else {ans=max(ans,dp[i]);}}cout<<ans+2<<"\n";ini();
}
signed main() 
{  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);  cin>>t;  while(t--) {  solve();  }  return 0;  
}

 H. Hard Demon Problem

分析一下,求三个二维前缀和,就可以得到结果

#include <bits/stdc++.h>  
using namespace std;  
#define int long long
int n,q;
int a[2005][2005];  
int pre[2005][2005];  
int preX[2005][2005];  
int preY[2005][2005];  
void solve()   
{  cin>>n; cin >> q;  for (int i = 1; i <= n; i++) {  for (int j = 1; j <= n; j++) {  cin >> a[i][j];  pre[i][j] = a[i][j] + pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1];  preX[i][j] = a[i][j] * i + preX[i - 1][j] + preX[i][j - 1] - preX[i - 1][j - 1];  preY[i][j] = a[i][j] * j + preY[i - 1][j] + preY[i][j - 1] - preY[i - 1][j - 1];  }  }  while (q--) {  int x1, y1, x2, y2;  cin >> x1 >> y1 >> x2 >> y2;  int sum = pre[x2][y2] - pre[x2][y1 - 1] - pre[x1 - 1][y2] + pre[x1 - 1][y1 - 1];  int sumX = preX[x2][y2] - preX[x2][y1 - 1] - preX[x1 - 1][y2] + preX[x1 - 1][y1 - 1];  int sumY = preY[x2][y2] - preY[x2][y1 - 1] - preY[x1 - 1][y2] + preY[x1 - 1][y1 - 1];  sumX -= sum * x1;  sumY -= sum * y1;  cout << sum + sumY + sumX * (y2 - y1 + 1) << " ";  }  cout<<"\n";
}  
signed main()   
{  ios::sync_with_stdio(false);  cin.tie(0);  int t, n;  cin >> t;  while (t--) {      solve();  }  return 0;  
}

 

相关文章:

Codeforces Round 993 (Div. 4)题解

A. Easy Problem 思路&#xff1a;经过看了一眼&#xff0c;我们发现&#xff0c;ab的和一定是n&#xff0c;且两个都是正整数&#xff0c; 所以a的范围就是从1~n-1 所以输出n-1即可 #include<bits/stdc.h> using namespace std; #define int long long int t; int n…...

【计算机网络】期末考试预习复习|中

作业讲解 转发器、网桥、路由器和网关(4-6) 作为中间设备&#xff0c;转发器、网桥、路由器和网关有何区别&#xff1f; (1) 物理层使用的中间设备叫做转发器(repeater)。 (2) 数据链路层使用的中间设备叫做网桥或桥接器(bridge)。 (3) 网络层使用的中间设备叫做路…...

从零用java实现 小红书 springboot vue uniapp (4)个人主页优化

前言 移动端演示 http://8.146.211.120:8081/#/ 前面的文章我们基本完成了详情页开发 今天我们具体的去进行实现个人中心 并且分享我开发时遇到的问题 首先先看效果 我们对布局整体规划一下 个人名片 半透明背景 刚开始我用的是 <view style"background-image: ur…...

为“行车大脑”降温:Simdroid-EC助力汽车ECU设计研发

ECU&#xff08;Electronic Control Unit&#xff0c;电子控制单元&#xff09;被誉为汽车的行车大脑&#xff0c;在工作时会产生大量的热量&#xff0c;而其散热存在以下难题&#xff1a;一是工作环境恶劣&#xff0c;ECU常处于高温环境中&#xff1b;二是ECU所处的空间较为狭…...

视频汇聚平台:Liveweb视频流媒体平台视频监控系统解决方案

数字化技术在安防领域的广泛应用已经成为公安等重要执法部门的重要趋势&#xff0c;主要得益于无线网络通信技术和计算机技术的快速进步。传统的视频监控系统存在诸多局限&#xff0c;例如只能进行现场监视&#xff0c;报警信息传输简单&#xff0c;无法远距离传输视频信号&…...

通过解调使用正则化相位跟踪技术进行相位解包裹

1. 绪论 光学计量学通常使用光学干涉仪来测量各种物理量。1,2 根据应用的不同&#xff0c;可以使用多种类型的干涉仪&#xff0c;但它们的共同目标是产生一个由被测物理量调制的条纹图案。使用这种光束编码程序可以检测到的物理量范围非常广&#xff1a;深度测量、应变分析、温…...

VMware替代 | 双一流大学采用ZStack ZSphere虚拟化平台加速医学应用算法分析

某双一流大学医学部在面对日益增长的医学应用算法分析需求时&#xff0c;选择采用ZStack ZSphere虚拟化平台&#xff0c;以满足其高性能计算和GPU业务应用的迫切需求。该平台凭借其轻量化、卓越性能及易用性&#xff0c;成功解决了医学部在虚拟化及GPU应用场景中的挑战。随着平…...

UNIAPP框架uView初步集成与开发设计

uView UI&#xff0c;是uni-app生态最优秀的UI框架&#xff0c;全面的组件和便捷的工具会让您信手拈来&#xff0c;如鱼得水。本文章分享UNIAPP集成使用uView页面动态开发设计。 一、使用HBuilder X 直接导入插件&#xff0c;下载后重启 uView - DCloud 插件市场 二、配置样…...

C05S08-LVS负载均衡

一、LVS 1. LVS概述 LVS&#xff08;Linux Virtual Server、Linux虚拟服务&#xff09;是一种基于Linux系统集群的负载均衡方案&#xff0c;属于四层的负载均衡。 集群&#xff1a;将相同组件部署在不同的服务器上&#xff0c;提供统一的服务&#xff0c;以及同样的功能&…...

C 语言代码诗韵:数字功能的雅集华章

函数基本操作练习 主要内容&#xff1a; 本任务主要练习函数的申请、定义、调用等&#xff0c;主要包含以下功能&#xff1a; 1&#xff09;编写函数&#xff0c;输入一个整数&#xff0c;求各个数字之和&#xff1b; 2&#xff09;编写函数&#xff0c;计算1&#xff01;2&…...

ps案例制作

宣传海报 暖色调海报商品展示图...

【C++】列表初始化、声明、范围for、array容器

列表初始化、声明、范围for、array容器 一、统一的列表初始化1.1 使用{ }初始化1.2 initializer_list容器 二、声明2.1 auto关键字2.2 decltype关键字2.3 nullptr关键字 三、范围for四、array容器和forward_list容器 一、统一的列表初始化 1.1 使用{ }初始化 在C98中&#xf…...

C++智能指针详解

一、智能指针简介 智能指针是一个类似于指针的类&#xff0c;将指针交给这个类对象进行管理&#xff0c;我们就可以像使用指针一样使用这个类&#xff0c;并且它会自动释放资源。 智能指针运用了 RAII 的思想(资源获得即初始化)。RAII 是指&#xff0c;用对象的生命周期来管理资…...

基础库正则表达式

我们已经可以用requests 库来获取网页的源代码&#xff0c;得到 HTML 代码。但我们真正想要的数据是包含在 HTML代码之中的&#xff0c;要怎样才能从 HTML,代码中获取想要的信息呢?正则表达式就是其中一个有效的方法。 本篇博客我们将了解一下正则表达式的相关用法。正则表达…...

【spring专题】spring如何解析配置类和扫描包路径

文章目录 目标重要的组件加载配置类启动解析组件定位配置类解析配置类 扫描过程总结 目标 这是我们使用注解方式启动spring容器的核心代码 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(MyConfig.class); User user (Us…...

MyBatis框架的入门

目录 MyBatis第一章&#xff1a;框架的概述1. MyBatis框架的概述 第二章&#xff1a;MyBatis的入门程序1. 创建数据库和表结构2. MyBatis的入门步骤 MyBatis 第一章&#xff1a;框架的概述 1. MyBatis框架的概述 MyBatis是一个优秀的基于Java的持久层框架&#xff0c;内部对…...

代码随想录D22-23 回溯算法01-02 Python

理论回顾 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案&#xff0c;如果想让回溯法高效一些&#xff0c;可以加一些剪枝…...

【网络云计算】2024第50周-每日【2024/12/13】小测-理论-写10个Bash Shell脚本-解析

文章目录 1. 计算1到100的和2. 列出当前目录下所有文件和文件夹3. 检查文件是否存在4. 备份文件到指定目录&#xff08;简单示例&#xff09;5. 打印系统当前日期和时间6. 统计文件中的行数7. 批量重命名文件&#xff08;将.txt后缀改为.bak&#xff09;8. 查找进程并杀死&…...

MATLAB转换C语言--问题(一)FFT 和 IFFT 的缩放因子

1. MATLAB 中的 FFT 和 IFFT 在 MATLAB 中&#xff0c;fft 和 ifft 函数具有以下缩放行为&#xff1a; fft&#xff1a;执行快速傅里叶变换&#xff08;FFT&#xff09;&#xff0c;不进行缩放。ifft&#xff1a;执行逆快速傅里叶变换&#xff08;IFFT&#xff09;&#xff0c;…...

轻松上手:使用 Vercel 部署 HTML 页面教程

&#x1f600; 在学习前端的过程中&#xff0c;部署项目往往是一个令人头疼的问题。然而&#xff0c;Vercel 为我们提供了一个便捷且免费的解决方案。 Vercel 是一个强大的云平台&#xff0c;专门用于前端项目的部署和托管。它不仅支持多种前端框架和静态网站生成器&#xff0…...

如何运用 HTM?

一、HTM 概述 HTM&#xff08;Hierarchical Temporal Memory&#xff0c;分层时序记忆&#xff09;是一种基于神经科学原理构建的计算模型&#xff0c;旨在模拟大脑的学习和记忆机制&#xff0c;以处理复杂的时间序列数据和模式识别任务。它具有独特的架构和算法&#xff0c;能…...

12.16【net】【study】

路由表是路由器或者其他互联网网络设备上存储的一张表&#xff0c;它记录了到达特定网络目的地的路径。路由表中的每一行&#xff08;即一个路由条目&#xff09;包含了目的地网络地址、子网掩码、下一跳地址、出接口等信息。 Destinations&#xff08;目的地&#xff09;和 R…...

2023和2024历年美赛数学建模赛题,算法模型分析!

文末获取历年优秀论文解析&#xff0c;可交流解答 2023年题目分析 MCM&#xff08;Mathematical Contest in Modeling&#xff09; 问题 A&#xff1a;遭受旱灾的植物群落 概述&#xff1a;要求建立预测模型&#xff0c;模拟植物群落在干旱和降水充裕条件下随时间的变化。类…...

Node.js内置模块

1.内置模块 Node.js的中文网参考手册:https://nodejs.cn//api 帮助文档 API文档:查看对应的模块,左边是模块,右边是模块的成员 源码:https://github.com/nodejs/node/tree/main/lib 查看 例如: http.js 创建web服务器的模块 -->进入源码中,搜索…...

测评|携程集团25年社招在线测评北森题库、真题分析、考试攻略

携程集团社招入职测评北森题库主要考察以下几个方面&#xff1a; 1. **言语理解**&#xff1a;这部分主要测试应聘者运用语言文字进行思考和交流、迅速准确地理解和把握文段要旨的能力。 2. **资料分析**&#xff1a;包括文字题和图表题&#xff0c;考察应聘者快速找出关键信息…...

快速启动Go-Admin(Gin + Vue3 + Element UI)脚手架管理系统

Go-Admin 是一个基于 Gin Vue Element UI & Arco Design & Ant Design 的前后端分离权限管理系统脚手架。它包含了多租户支持、基础用户管理功能、JWT 鉴权、代码生成器、RBAC 资源控制、表单构建、定时任务等功能。该项目的主要编程语言是 Go 和 JavaScript。 ps&a…...

数据分流:优化数据处理流程的关键策略

引言 在大数据时代&#xff0c;企业面临着数据量的激增和数据类型的多样化。为了有效地管理和分析这些数据&#xff0c;数据分流成为了一个重要的策略。数据分流指的是将数据按照特定的规则和流程分配到不同的处理路径&#xff0c;以优化数据处理效率和准确性。本文将探讨数据…...

RabbitMQ如何构建集群?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ如何构建集群&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ如何构建集群&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;集群&#xff08;Cluster&#x…...

RNN LSTM Seq2Seq Attention

非端到端&#xff1a; data -》 cleaning -》 feature Engining &#xff08;70%-80%工作 设计特征&#xff09;-》 分类器 -》预测 端到端 End-to-End&#xff1a; data -》 cleaning -》Deep learning&#xff08;表示学习&#xff0c;从数据中学习特征&#xff09; -》…...

硬件设计-ADC和低本底噪声为何至关重要

简介 在工程领域&#xff0c;精度是核心要素。无论是对先进电子设备执行质量和性能检测&#xff0c;还是对复杂系统进行调试&#xff0c;测量精度的高低都直接关系到项目的成功与否。这时&#xff0c;示波器中的垂直精度概念就显得尤为重要&#xff0c;它衡量的是电压与实际被…...