2023年广东省程序设计大赛

C

双指针,排序

买便宜的,用最贵的卖出

#include<bits/stdc++.h>using namespace std;
#define int long long
const int N = 2e5 + 10;
int n,m;
int re[2]={1,4};
int bl[4]={2,3,5,6};
int f;
struct node
{int x,y;
}a[N];
bool cmp(node W,node Q)
{return W.x<Q.x;
}
void solve()
{cin>>n;for(int i=1;i<=n;i++){
//		cin>>a[i].x>>a[i].y;scanf("%d%d",&a[i].x,&a[i].y);}sort(a+1,a+n+1,cmp);int ans=0;int l=1,r=n;while(l<r){int k=min(a[l].y,a[r].y);ans+=k*(a[r].x-a[l].x);a[r].y-=k;a[l].y-=k;if(a[r].y==0) r--;if(a[l].y==0) l++;}cout<<ans<<endl;
}
signed main()
{int T;cin>>T;while(T--)solve();return 0;
} 

K

爆搜+回溯 

#include<bits/stdc++.h>using namespace std;
#define int long long
const int N = 2e5 + 10;
int n,m,k;
int a[30][30];
int f[][2]={{0,2},{0,-2},{2,0},{-2,0}};
int ff[][2]={{0,1},{0,-1},{1,0},{-1,0}};
int minn=6;
void dfs(int c)
{minn=min(minn,c);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]){for(int k=0;k<4;k++){int dx=i+f[k][0],dy=j+f[k][1];int tx=i+ff[k][0],ty=j+ff[k][1];if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&a[tx][ty]==1&&a[dx][dy]==0){a[i][j]=0;a[dx][dy]=1;a[tx][ty]=0;dfs(c-1);a[i][j]=1;a[dx][dy]=0;a[tx][ty]=1;						}}}}}
}
void solve()
{memset(a,0,sizeof a);minn=6;cin>>n>>m>>k;for(int i=1;i<=k;i++)	{int x,y;cin>>x>>y;a[x][y]=1;}dfs(k);cout<<minn<<endl;
}
signed main()
{int T;cin>>T;while(T--)solve();return 0;
} 

注意python中global的运用 

f = [[0, 2], [0, -2], [2, 0], [-2, 0]]
ff = [[0, 1], [0, -1], [1, 0], [-1, 0]]def dfs(c):global minn  # 声明使用全局变量minn = min(minn, c)for i in range(1, n + 1):for j in range(1, m + 1):if a[i][j] == 1:for k in range(4):dx, dy = i + f[k][0], j + f[k][1]tx, ty = i + ff[k][0], j + ff[k][1]if dx >= 1 and dx <= n and dy >= 1 and dy <= m and a[tx][ty] == 1 and a[dx][dy] == 0:a[i][j] = 0a[dx][dy] = 1a[tx][ty] = 0dfs(c - 1)a[i][j] = 1a[dx][dy] = 0a[tx][ty] = 1T = int(input())while T:T -= 1n, m, k = map(int, input().split())a = [[0 for _ in range(m + 1)] for _ in range(n + 1)]global minnminn = 6  # 重置 min 值for _ in range(k):x, y = map(int, input().split())a[x][y] = 1dfs(k)print(minn)

枚举所有邻居的数量和不是邻居的数量

假设有k个邻居,那么剩余的n-k个邻居需要2*(n-k),所以房子的个数需要大于等于2*(n-k)+k

没有只有1个邻居的可能,还有一种可能就是所有人都没有邻居,那么需要的房子数量是2*n-1

所有可能取最大值

#include<bits/stdc++.h>using namespace std;#define int long long
const int N = 5e5 + 10;
int n,m,k;
struct  node
{int x,y;
}a[N];
int sum[N];
bool cmp(node W,node E)
{return W.x-W.y>E.x-E.y;
}
void solve()
{cin>>n>>m;for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i].y;int ans=a[1].x;int res=0;for(int i=2;i<=n;i++){ans+=a[i].x;if(2*n-i<=m){res=max(res,ans+sum[n]-sum[i]);}}if(2*n-1<=m){res=max(res,sum[n]);}cout<<res<<endl;
}
signed main()
{int T;cin>>T;while(T--)solve();return 0;
} 

I

二分答案

对于不需要在图上操作的,尤其是,n*m数组太大的情况,可以使用i*m+j来存储每个点的值,

check(x)

只需要看整个图中比x小的数的坐标,只要这些小的数构成的路径满足题意(只能往右往下走)

(怎么样判断是否满足,一行一行遍历,并记录上一个点的列坐标,如果当前点的纵坐标小于上一个点的列坐标,则不满足题意,因为,当小于上一个点的列坐标,从上一个点走向当前点,上一个点只能往左走,才能走到当前点)

对于路径上其他大于x的点,不管怎么排列,x一定可以满足是这条路径最大的mex(x)

#include<bits/stdc++.h>using namespace std;#define int long long
const int N = 2e6 + 10;
int n,m,k;
int a[N];
int check(int x)
{int last=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i*m+j]<x){if(j<last) return 0;last=j;}}}return 1;
}
void solve()
{cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int x;cin>>x;a[i*m+j]=x;} }int l=0,r=n*m;while(l<r){int mid=(l+r+1)>>1;if(check(mid)) l=mid;elser=mid-1;} cout<<r<<endl;
}
signed main()
{int T;cin>>T;while(T--)solve();return 0;
} 

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

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

相关文章

ubuntu装完gnome后如何moba登录使用

在Ubuntu中安装了GNOME桌面环境后&#xff0c;你可以通过以下步骤设置MobaXterm远程桌面访问&#xff1a; 确保你的Ubuntu系统已经安装了xrdp服务&#xff0c;如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install xrdp安装GNOME桌面…

Echarts 多y轴折柱混合图

先说下需求&#xff1a;在多y轴的折柱混合图&#xff0c;点击图例时&#xff0c;对应的图会隐藏&#xff0c;但是对应的y轴的线和y轴上的那么不会隐藏。 因为是点击图例&#xff0c;所以这里用到点击事件&#xff0c;Echarts有 legendselectchanged 事件&#xff0c;如下代…

【Linux】POSIX线程库——线程控制

目录 1.线程创建方法 例&#xff1a;多线程创建 2.线程终止 2.1 return nulptr; 2.2 pthread_exit(nullptr); 3. 线程等待 3.1 等待原因 3.2 等待方法 线程终止的返回值问题 4.线程取消 5. 线程分离 5.1 分离原因 5.2 分离方法 6.封装线程 用的接口是POSIX线程库…

音视频开发—音频相关概念:数模转换、PCM数据与WAV文件详解

文章目录 前言1.模拟数字转换&#xff08;ADC&#xff09;1.1ADC的关键步骤&#xff1a; 2.数字模拟转换&#xff08;DAC&#xff09;2.1DAC 的基本流程包括&#xff1a; 3.PCM数据3.1PCM 数据的关键要素包括&#xff1a; 4.WAV文件4.1 WAV的构成4.2WAV文件的标准块结构4.3WAV的…

代码随想录算法训练营第三十八天 | 435.无重叠区间、763.划分字母区间、56.合并区间

目录 435.无重叠区间 思路 代码 763.划分字母区间 思路 代码 56.合并区间 思路 代码 今天的三道题目&#xff0c;都算是 重叠区间 问题&#xff0c;大家可以好好感受一下。 都属于那种看起来好复杂&#xff0c;但一看贪心解法&#xff0c;惊呼&#xff1a;这么巧妙&#xff01…

YOLOV8逐步分解(6)_模型训练初始设置之image size检测batch预设及dataloder初始化

yolov8逐步分解(1)--默认参数&超参配置文件加载 yolov8逐步分解(2)_DetectionTrainer类初始化过程 yolov8逐步分解(3)_trainer训练之模型加载 YOLOV8逐步分解(4)_模型的构建过程 YOLOV8逐步分解&#xff08;5&#xff09;_模型训练初始设置之混合精度训练AMP 接逐步分解…

OpenLayers6入门,OpenLayers实现在地图上拖拽编辑修改绘制图形

专栏目录: OpenLayers6入门教程汇总目录 前言 在前面一章中,我们已经学会了如何绘制基础的三种图形线段、圆形和多边形:《OpenLayers6入门,OpenLayers图形绘制功能,OpenLayers实现在地图上绘制线段、圆形和多边形》,那么本章将在此基础上实现图形的拖拽编辑功能,方便我…

使用Java 读取PDF表格数据并保存到TXT或Excel

目录 导入相关Java库 Java读取PDF表格数据并保存到TXT Java读取PDF表格数据并保存到Excel 在日常工作中&#xff0c;我们经常需要处理来自各种来源的数据。其中&#xff0c;PDF 文件是常见的数据来源之一。这类文件通常包含丰富的信息&#xff0c;其中可能包含重要的表格数据…

FreeRtos进阶——栈保存现场的几种场景

MCU架构 在认识栈的结构前&#xff0c;我们先来认识以下单片机的简单架构。在我们的CPU中有着很重要的一个模块——寄存器&#xff08;R0-R15&#xff09;&#xff0c;其中R13&#xff0c;R14&#xff0c;R15的别称分别为SP栈顶指针、LR返回地址、PC当前指令地址。外部RAM是单片…

css中min-height

在CSS中&#xff0c;min-height 属性用于设置元素的最小高度。这意味着&#xff0c;即使内容没有达到指定的最小高度&#xff0c;元素也会尝试占据至少指定的最小高度。 例如&#xff0c;如果你有一个 <div> 元素&#xff0c;并希望它至少有200px的高度&#xff0c;即使…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时&#xff0c;确实有点迷糊。但是他们是独立的&#xff0c;没有太大关联。 就是说在Android studio中看到的两个版本信息&#xff0c;并无太大关联&#xff0c;是相互独立的。Gradle插件版本决定了你的项目是如何构建的&#xff0c;而Gradle版本是执行构建…

对竞品分析的理解

一、竞品分析是什么 竞品分析即对竞争对手进行分析&#xff0c;是市场研究中的一项重要工作&#xff0c;它可以帮助企业了解竞争对手的产品、策略、市场表现等信息&#xff0c;通过竞品分析可以为自己的产品制定更加精准的策略。 二、为什么要做竞品分析 1.了解市场情况 了解…

002 访问修饰符 package

访问修饰符 在Java中&#xff0c;protected、private、public 和包级别访问权限&#xff08;有时称为default或package-private&#xff09;是用于控制类、变量、方法和构造器的可见性和可访问性的修饰符。下面是这些修饰符的主要区别&#xff1a; public&#xff1a; 可见性…

vue/core源码中ref源码的js化

起源&#xff1a; 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后&#xff0c;突发奇想想看下转化成js有多少行。 进行转化&#xff1a; let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…

M2m中的采样

采样的完整代码 import torch import numpy as np from torchvision import datasets, transforms from torch.utils.data import DataLoader, WeightedRandomSampler, SubsetRandomSamplerdef get_oversampled_data(dataset, num_sample_per_class):""" Gener…

C语言从头学12——流程控制(一)

C语言程序的执行顺序是从前到后依次序执行的。如果想要控制程序执行的流程&#xff0c;就必须使用 流程控制的语法结构&#xff0c;分为条件执行和循环执行。 1、if语句 if 语句在前面的举例中曾经出现过&#xff0c;这里做详细介绍。该语句用于条件判断&#xff0c;满…

Upstream最新发布2024年汽车网络安全报告-百度网盘下载

Upstream最新发布2024年汽车网络安全报告-百度网盘下载 2024年2月7日&#xff0c;Upstream Security发布了2024年Upstream《GLOBAL AUTOMOTIVE CYBERSECURITY REPORT》。这份报告的第六版着重介绍了汽车网络安全的拐点&#xff1a;从实验性的黑客攻击发展到规模庞大的攻击&…

fpga系列 HDL 00 : 可编程逻辑器件原理

一次性可编程器件&#xff08;融保险丝实现&#xff09; 一次性可编程器件&#xff08;One-Time Programmable Device&#xff0c;简称 OTP&#xff09;是一种在制造后仅能编程一次的存储设备。OTP器件在编程后数据不可更改。这些器件在很多应用场景中具有独特的优势和用途。 …

【软件设计师】——10.面向对象技术

目录 10.1 基本概念 10.2设计原则 10.3 设计模式的概念与分类 10.4 创建型模式 10.4.1 Singleton 单例模式 10.4.2 Builder 构建器模式 10.4.3 Abstract Factory 抽象工厂模式 10.4.4 Prototype原型模式 10.4.5 Factory Method工厂方法模式 10.5 结构型模式 10.5.1 A…

【LeetCode算法】第83题:删除排序链表中的重复元素

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;双指针法&#xff0c;只需遍历一遍。使用low指向前面的元素&#xff0c;high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面&#xff0c;实…