Codeforces Round 719 (Div. 3)除F2题外补题报告

Codeforces Round 719 Div. 3 除F2题外补题报告

  • 得分情况
  • 补题情况
  • 错题分析
    • C题
      • 题目大意
      • 初次思路
      • 正解思路
      • 正解代码
      • 错误原因
    • D题
      • 题目大意
      • 初次思路
      • 正解思路
      • 正解代码
      • 错误原因
    • E题
      • 题目大意
      • 初次思路
      • 正解思路
      • 正解代码
    • F1题
      • 题目大意
      • 正解思路
      • 正解代码
    • G题
      • 题目大意
      • 正解思路
      • 正解代码

得分情况

A题AC
B题AC
C题TLE在样例2
(题简单,脑袋没转过弯来)

补题情况

全部AC

错题分析

C题

题目大意

构造一个n∗n的矩阵,使得相邻的两个格子填的数不能相邻。

初次思路

暴力枚举。

正解思路

我们可以把奇偶分开填入矩阵,可知,除了2*2无解,别的情况都行。

正解代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){int t;scanf("%d",&t);while(t--){int k=1;int n;scanf("%d",&n);if(n==1){printf("1\n");continue;}if(n==2){printf("-1\n");continue;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){printf("%d ",k);k+=2;if(k>n*n){k=2;}}printf("\n");}}return 0;
}

错误原因

题意理解错了。

D题

题目大意

给出T组序列a,长度为N,询问有多少对 ( i , j ) (i,j) (i,j)满足 i < j i<j i<j a j − a i = j − i a_j −a_i =j−i ajai=ji

初次思路

暴力枚举。

正解思路

a j − a i = j − i a_j −a_i =j−i ajai=ji变形为 a j − j = a i − i a_j −j =a_i−i ajj=aii,然后统计值与下标的差,再用排列组合公式求出数量—— n ∗ ( n − 1 ) / 2 n*(n-1)/2 n(n1)/2,最后求和。

正解代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int vis[400005];
int main(){int t;scanf("%d",&t);while(t--){memset(vis,0,sizeof vis);int n;scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);vis[x-i+n]++;}long long ans=0;for(int i=0;i<=2*n;i++){ans+=1ll*vis[i]*(vis[i]-1)/2;}printf("%lld\n",ans);}return 0;
}

错误原因

没有想到对原式进行变形。

E题

题目大意

一共有 t 组数据,每组数据第一行为 n ,为字符串长度,下一行为一个字符串(只有 ’ . ’ 和 ’ * '字符,每次可以向右或者向左移动 ‘ * ’ 字符,求把所有的 ’ * ’ 字符连起来的最小移动次数。

初次思路

暴力模拟。

正解思路

中间的羊是羊群的中心,因此让羊往中心靠拢最优,所以统计其它羊靠过来的距离最优。

正解代码

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int sheep[1000005];
int main(){int t;cin>>t;while(t--){long long n,cnt=0,step=0;string s;cin>>n>>s;for(int i=0;i<n;i++){if(s[i]=='*'){sheep[++cnt]=i;}}int mid=(1+cnt)/2;int len_left=1,len_right=1;for(int i=1;i<=cnt;i++){if(sheep[mid]>sheep[i]){step+=sheep[mid]-sheep[i]-len_left++;}if(sheep[mid]<sheep[i]){step+=sheep[i]-sheep[mid]-len_right++;}}cout<<step<<"\n";} return 0;
}

F1题

题目大意

交互题。给定 n,t,k(由于这里是简单版,保证 t=1,即t没啥用),有一个长度为n的标号为1⋯n 的仅含01的数组,你每次可以询问l到r的和,需要得出数组中第k个0的下标。最多询问20次。

正解思路

可以用二分枚举位置,通过询问结果来判断前面有多少个0,如果0的数量大于等于k,说明mid要变小,l=mid+1,反之,r=mid。

正解代码

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int sheep[1000005];
int main(){int m,n,t;cin>>m>>t>>n;int l=1,r=m;while(l<r){int mid=(l+r)/2;cout<<"? "<<1<<" "<<mid<<"\n";cout.flush();int x;cin>>x;if(mid-x>=n){r=mid;}else{l=mid+1;}}cout<<"! "<<l;return 0;
}

G题

题目大意

给定一个n×m的网格,每个格子(i,j)都有一个整数参数 a i j ( − 1 < = a i j < = 1 0 9 ) a_{ij}(-1<=a_{ij}<=10^9) aij(1<=aij<=109), a i j = − 1 a_{ij}=−1 aij=1表示这个格子不能通过;否则,这个格子可以通过,若 a i j > 0 a_{ij}>0 aij>0则表示这个格子内有一个传送门。现在小D想要从(1,1)移动到(n,m),它可以以如下两种方式移动:在任意两个相邻且参数均不为−1的格子间移动,花费为w,在有传送门的两个格子 (i,j)和(x,y) 间移动,花费为 a i j + a x y a_{ij}+a_{xy} aij+axy求小D所需的最小花费。

正解思路

分类思考,一是不走传送门,二是走一次传送门,进行两次bfs,求出最终结果。

正解代码

#include <bits/stdc++.h>
using namespace std;
int n,m,w;
int a[2010][2010],dis[2010][2010];
long long ans1=0x3f3f3f3f3f3f3f3f,ans2=0x3f3f3f3f3f3f3f3f,allans=0x3f3f3f3f3f3f3f3f;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void bfs(int sx,int sy,long long &ans){memset(dis,-1,sizeof(dis));queue<pair<int,int> >que;dis[sx][sy]=0;que.push(make_pair(sx,sy));while(!que.empty()){int x=que.front().first,y=que.front().second;que.pop();for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];if(nx<1||ny<1||nx>n||ny>m||a[nx][ny]==-1||dis[nx][ny]!=-1){continue;}dis[nx][ny]=dis[x][y]+1;que.push(make_pair(nx,ny));}}if(sx==1&&dis[n][m]!=-1){allans=min(allans,(long long)dis[n][m]*w);}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(dis[i][j]!=-1&&a[i][j]>0){ans=min(ans,(long long)dis[i][j]*w+a[i][j]);}} }
}
int main(){scanf("%d%d%d",&n,&m,&w);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);}}bfs(1,1,ans1);bfs(n,m,ans2);allans=min(allans,ans1+ans2);printf("%lld",allans==0x3f3f3f3f3f3f3f3f?-1:allans);return 0;
}

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

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

相关文章

EDA 许可证调度

背景 在芯片设计和HPC行业EDA软件的许可证是很昂贵的数据资源&#xff0c;如何高效利用许可证以及计算资源是系统管理员需要认真思考的问题。 商用解决方案 LSF是芯片和HPC行业流行的调度方案&#xff0c;LSF产品家族包含了许可证调度的功能。它提供了许可证管理和调度功能&…

开发知识点-C++之win32与NT内核

win32 Windows MFC编程 常用API汇总EnumWindows()函数UpdateData()函数static与 单例 设计模式函数原型:BOOL WINAPI SetConsoleTitle(__in LPCTSTR lpConsoleTitle);HWND 是一个基本类型 表示窗口句柄FindWindow函数SendMessage函数 将指定的消息发送到一个或多个窗口PostMes…

Matlab|配电网智能软开关(sop)规划模型

目录 1 主要内容 目标函数 2 部分程序 3 程序结果 3.1 sop选址定容优化模型 3.2 对比算例&#xff08;不含sop&#xff09; 4 下载链接 1 主要内容 该程序参考文献《基于改进灵敏度分析的有源配电网智能软开关优化配置》&#xff0c;采用二阶锥算法&#xff0c;以改进的…

蓝桥杯-最大距离

根据题意直接写出来就行。 简单题就话不多说上代码了 #include <iostream> #include <cmath> using namespace std; int main() {int n;cin>>n;int a[1000]{0};for(int i0;i<n;i){cin>>a[i];}int temp 0;int dis 0;for(int i0;i<n-1;i)for(…

JMeter—逻辑控制器

JMeter逻辑控制器 JMeter逻辑控制器可以对元件的执行逻辑进行控制&#xff0c;除仅一次控制器外&#xff0c;其他可以嵌套别的种类的逻辑控制器  一、ForEach控制器 定义一个循环规则&#xff0c;关键参数说明&#xff1a; 输入变量前缀&#xff1a;可以在“用户自定义的变量…

读书笔记:《思考 . 快与慢》- 3 过度自信与决策错误

《思考 . 快与慢》 [美] 丹尼尔 . 卡尼曼 著 胡晓姣 李爱民 何梦莹 译 这本书会改变你的思考方式 叙事谬误&#xff0c;用来描述有缺憾的往事是如何影响我们的世界观和我们对未来的预期的 能够吸引人们眼球的那些说法往往很通俗易懂&#xff0c;具体而不抽象 人类常会…

蓝桥杯刷题(二)

参考大佬代码&#xff1a;&#xff08;区间合并二分&#xff09; import os import sysn, L map(int, input().split()) # 输入n,len arr [list(map(int, input().split())) for _ in range(n)] # 输入Li,Si def check(Ti, arr, L)->bool:sec [] # 存入已打开的阀门在…

Golang中defer与return的执行顺序——不易混淆

前言 defer和return是常用的一个点&#xff0c;面试高频&#xff0c;也是实战容易踩坑。先前对他进行过一次学习&#xff0c;理解起来略拗口&#xff0c;但好歹也算是学会了。昨天面IEG时候被面试官拷打&#xff0c;并给出了一些提示&#xff0c;让我对个知识点有了新的认识&a…

JDK17镜像制作

背景 获取JDK17 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 解压JDK tar -zxvf jdk-17_linux-x64_bin.tar.gz 制作JRE 由于jdk的体积比较大&#xff0c;可以使用jre来作为运行环境&#xff0c;jdk1.8及以前版本&#xff0c;自带jre&#…

JVM-1

目录 1.基础知识 1.栈 2.本地方法栈 3.程序计数器 4.堆 5.方法区 6.JVM内存可见性 2.虚拟机类加载机制 1.加载 2.验证 3.准备 4.解析 5.初始化 6.使用 7.卸载 1.基础知识 JVM内存模型&#xff08;5种&#xff09;&#xff1a;栈&#xff0c;本地方法栈&#xff…

深入了解XSS攻击:原理、防御与应对策略

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

OKLink2月安全月报| 2起典型漏洞攻击案例分析

在本月初我们发布的2024年2月安全月报中提到&#xff0c;2月全网累计造成损失约1.03亿美元。其中钓鱼诈骗事件损失占比11.76%。 OKLink提醒大家&#xff0c;在参与Web3项目时&#xff0c;应当仔细调研项目的真实性、可靠性&#xff0c;提升对钓鱼网站和风险项目的甄别能力&…

2024年人工智能发展路线图

2024年人工智能发展路线图 2024年&#xff0c;人工智能将迎来重大发展。从全新模型、资金注入到技术进步&#xff0c;发展速度之快让人难以跟上。本文概述了2024年可能定义AI发展的关键事件、产品发布、研究突破和趋势。 Q1 2024 Gemini Ultra发布&#xff1a;谷歌预计将发布…

set系列集合

set系列集合 无序&#xff1a;存取顺序不一致 不重复&#xff1a;可以去除重复 无索引&#xff1a;没有带索引的方法&#xff0c;所以不能使用普通的for循环&#xff0c;也不能通过索引来获取元素 set集合的实现类 HashSet:无序、不重复、无索引 LinkedHashSet:有序、不重…

PyQt5开发基础知识【一】

零.前言&#xff1a; 作者写这篇博客的目的主要在于巩固PyQt5的基础知识&#xff0c;例如PyQt5的几个核心模块&#xff0c;分别有什么功能&#xff0c;PyQt5的所有控件的使用方法等。 一.PyQt5的常见模块 1.1QtCore&#xff1a; 该模块包含了非GUI的功能设计。 这个模块被…

python绘制水果价格与利润表图1-3

input输入 &#xff08;默认输入&#xff1a; 苹果&#x1f34e; 橘子&#x1f34a; 梨子&#x1f350; 葡萄&#x1f347;空一行空值表示结束输入input添加 1. 添加 2. 删除 序号和文字都可以&#xff0c;要空格或者空行 可以点对点输入数据深色主题 mpl_style(darkTrue)# 折线…

PyQt5实现远程更新exe可执行文件

PyQt5实现远程下载更新exe可执行文件 1、实现流程 1、获取远程http地址 2、获取需要更新的exe文件 3、点击更新 4、把exe强关闭 5、下载文件 6、更新2、效果图 3、示例代码 conf.ini配置文件: {"http_address_edit_value": "http://xxx.com/xxx/xxx.exe&qu…

【Go】令牌桶限流算法

1. 限流 限流&#xff0c;顾名思义&#xff0c;限制用户请求流量&#xff0c;避免大规模并发导致系统宕机。 2. 令牌桶算法 令牌管理员以恒定的速率向令牌桶里放置一个令牌。如果桶满&#xff0c;就丢弃令牌。 请求到达时&#xff0c;都要先去令牌桶里取一个令牌&#xff0c…

如何进入Windows 11的安全模式?这里提供详细步骤

序言 如果你在启动Windows 11 PC时遇到问题,则重新启动到安全模式可能会有所帮助,该模式会暂时禁用驱动程序和功能,以使你的PC更稳定。下面是如何做到这一点。 在Windows 7和更早版本中,通常可以在打开电脑后按功能键(如F8)启动安全模式。Microsoft从Windows 8中删除了…

C++内存管理篇

文章目录 1. C/C内存分布2. C中的内存管理方式3. operator new和operator delete函数4. new和delete的实现原理5. 定位new表达式(placement-new) 1. C/C内存分布 C语言中&#xff0c;为了方便管理内存空间&#xff0c;将内存分成了不同的区域&#xff0c;每个区域管理不同的数据…