RUC2024《综合设计》期中测试

T1
原题链接https://www.luogu.com.cn/problem/P1025
不是我出的

T2
原题链接:https://www.luogu.com.cn/problem/P26787
这道题就是讲过的二分+贪心,先二分规定每两个点之间都必须大于等于某个值,然后依次枚举通过贪心求出最少需要删除的点数,最后用这个最小值和m比较一下即可。

#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define dwn(i,x,y) for(int i=x;i>=y;i--)
#define ll long long
using namespace std;
template<typename T>inline void qr(T &x){x=0;int f=0;char s=getchar();while(!isdigit(s))f|=s=='-',s=getchar();while(isdigit(s))x=x*10+s-48,s=getchar();x=f?-x:x;
}
int cc=0,buf[31];
template<typename T>inline void qw(T x){if(x<0)putchar('-'),x=-x;do{buf[++cc]=int(x%10);x/=10;}while(x);while(cc)putchar(buf[cc--]+'0');
}
const int N=5e4+10;
int L,n,m,a[N];
bool check(int lim){int last=0,cnt=0;rep(i,1,n){if(a[i]-last<lim)cnt++;else last=a[i];}if(L-last<lim)cnt++;return cnt<=m;
}
void solve(){qr(L),qr(n),qr(m);rep(i,1,n)qr(a[i]);int l=1,r=L,mid,ans=0;while(l<=r){mid=(l+r)/2;if(check(mid))l=mid+1,ans=mid;else r=mid-1;}qw(ans);
}
int main(){int tt;tt=1;while(tt--)solve();return 0;
}

T3
原题链接:https://www.luogu.com.cn/problem/P1149
不是我出的

T4
高中的时候师兄出的题,不过我把简单版拿出来考大家,原来的版本不止一块糕,有兴趣的同学可以思考。

猜测有不少人会用能切多大切多大的策略,但是这样确实是不正确的,提交发现答案错误以后应该是可以发现的。

正确的思路就是先考虑 n ∗ 1 n*1 n1 1 ∗ m 1*m 1m这两种糕,这两种糕显然都满足前面那个贪心,这就说明如果不横切只竖切的话,切法是固定的。

观察可以发现,每切一次一边的长度大概会减少一半,也就是说横切和竖切的刀数最多也就是30~40,如果超过了就会切成长度为1的。

结合这两种思路,我们枚举横切的刀数,剩下的刀数全部用来竖切,拿一个数组记录每一边切多少刀以后还会剩下多少,然后统计即可。时间复杂度为 O ( T l o g N ) O(TlogN) O(TlogN)

#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define dwn(i,x,y) for(int i=x;i>=y;i--)
#define ll long long
using namespace std;
template<typename T>inline void qr(T &x){x=0;int f=0;char s=getchar();while(!isdigit(s))f|=s=='-',s=getchar();while(isdigit(s))x=x*10+s-48,s=getchar();x=f?-x:x;
}
int cc=0,buf[31];
template<typename T>inline void qw(T x){if(x<0)putchar('-'),x=-x;do{buf[++cc]=int(x%10);x/=10;}while(x);while(cc)putchar(buf[cc--]+'0');
}
const int N=110;
int n,m,k;
int cnt1,f[N];
int cnt2,g[N]; 
void solve(){qr(n),qr(m),qr(k);f[cnt1=0]=n;while(f[cnt1]>1){cnt1++;f[cnt1]=(f[cnt1-1]+1)/2;}g[cnt2=0]=m;while(g[cnt2]>1){cnt2++;g[cnt2]=(g[cnt2-1]+1)/2;}ll ans=0;rep(i,0,min(cnt1,k)){int j=min(cnt2,max(0,k-i));ans=max(ans,1ll*n*m-1ll*f[i]*g[j]);}qw(ans);puts("");
}
int main(){    int tt;qr(tt); while(tt--)solve();return 0;
}

T5
fyh大神出的
原题链接:https://www.luogu.com.cn/problem/P3974
这是fyh大神的思路

#include <cstdio>
const int CN = 1010;
int T, N, M, a[CN][CN];
long long f[CN][CN];
long long max(long long a, long long b, long long c) {if (a > b)return a > c ? a : c;return b > c ? b : c;
}
int main() {scanf("%d", &T);while (T--) {scanf("%d%d", &N, &M);for (int i = 1; i <= N; ++i)for (int j = 1; j <= M; ++j)scanf("%d", &a[i][j]);for (int i = N; i >= 1; --i)for (int j = 1; j <= M; ++j)f[i][j] = max(f[i + 1][j - 1] + a[i][j], f[i + 1][j], f[i][j - 1]);printf("%lld\n", f[1][M]);for (int i = 1; i <= N; ++i)for (int j = 1; j <= M; ++j)f[i][j] = 0;}return 0;
}

洛谷上应该有这种做法的讲解,说实话我也感觉很震惊,也不太理解。

下面讲一下我的贪心法,这种做法实际上就是一行一行模拟路径的选择,大家可以自己模拟一下,这个模拟过程确实挺复杂的。

首先考虑一行的情况,很明显就是取最大值。

然后考虑两行的情况,我的思路是在第一行已经确定路径的基础上将第二行加上,如果只靠第一行的路径没有办法满足第二行的全部需求,那么我们再给第二行添上能够恰好满足条件的路径,这些路径显然是先下到第二行再往右边走。对于第一行原本的路径,我采用的是能往下就往下的做法,比如当前已经有x跳路径到达 ( 1 , i ) (1,i) (1,i),但是 ( 1 , i ) (1,i) (1,i)右边的最大值mx小于x,那么就可以把x-mx的路径提前往下走,剩下的路径显然是可以满足要求的。

现在拓展到一般情况,假设现在要把第i行插入矩阵,其中 f [ i ] [ j ] f[i][j] f[i][j]表示刚好到达 ( i , j ) (i,j) (i,j)的路径条数,这些路径刚好就是从第 i − 1 i-1 i1行直接下来的。

那么我们马上就要考虑需要额外引入多少条路径,这些路径就是从起点直接下到 ( i , 1 ) (i,1) (i,1)。这个值是 m a x ( 0 , m a x ( a [ i ] [ j ] − ∑ k = 1 j f [ i ] [ k ] ) ) max(0,max(a[i][j]-\sum_{k=1}^jf[i][k])) max(0,max(a[i][j]k=1jf[i][k])),也就是最糟糕的情况是把下来的全部路径拉到右边,如果这不能满足要求,那就要额外引入路径。

然后的操作就是从左往右枚举点 ( i , j ) (i,j) (i,j),显然我们要在每一个点都让最多的路径往下,使得剩下的路径在全部往右走的情况下能够满足每一个点的要求,具体实现大家可以自己去想,不过思路都是一样的,这里只是提供其中实现方法。

#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define dwn(i,x,y) for(int i=x;i>=y;i--)
#define ll long long
using namespace std;
template<typename T>inline void qr(T &x){x=0;int f=0;char s=getchar();while(!isdigit(s))f|=s=='-',s=getchar();while(isdigit(s))x=x*10+s-48,s=getchar();x=f?-x:x;
}
int cc=0,buf[31];
template<typename T>inline void qw(T x){if(x<0)putchar('-'),x=-x;do{buf[++cc]=int(x%10);x/=10;}while(x);while(cc)putchar(buf[cc--]+'0');
}
const int N=1e3+10;
const ll inf=1e18;
int n,m,a[N][N];
ll f[N][N],sum[N][N],nd[N][N],mx[N][N];
void solve(){qr(n),qr(m);rep(i,1,n)rep(j,1,n)qr(a[i][j]);rep(i,1,n)rep(j,1,n)f[i][j]=sum[i][j]=0;ll ans=0;rep(i,1,n){rep(j,1,m){sum[i][j]=sum[i][j-1]+f[i][j];nd[i][j]=a[i][j]-sum[i][j];}mx[i][m+1]=-inf;dwn(j,m,1)mx[i][j]=max(mx[i][j+1],nd[i][j]);ans+=max(0ll,mx[i][1]);ll add=max(0ll,mx[i][1]);rep(j,1,m){if(add>mx[i][j+1]){ll maxflow=min(add+sum[i][j],add-mx[i][j+1]);f[i+1][j]+=maxflow;add-=maxflow;}}}qw(ans);puts("");
}
int main(){int tt;qr(tt);while(tt--)solve();return 0;
}

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

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

相关文章

薄冰英语语法学习--名词2-格

名词后面 s&#xff0c;代表后面这个东西属于前面的。 比如toms book&#xff0c;汤姆的书。 末尾是s&#xff0c;那么直接在最后加就行了。比如boys&#xff0c;男孩们的 表示几个词共同 的所有关系在最后一个词的词尾加 sMary and Toms books 玛丽和汤姆共有的书表示几个词…

深入探讨C++的高级反射机制

反射是一种编程语言能力&#xff0c;允许程序在运行时查询和操纵对象的类型信息。它广泛应用于对象序列化、远程过程调用、测试框架、和依赖注入等场景。 由于C语言本身的反射能力比较弱&#xff0c;因此C生态种出现了许多有趣的反射库和实现思路。我们在本文一起探讨其中的奥秘…

DOM遍历

DOM 遍历是指在 HTML 文档中导航和定位元素的过程。通过 DOM 遍历&#xff0c;您可以在文档中移动并查找特定的元素&#xff0c;以便对其进行操作或者检索信息。 寻找子元素 //DOM遍历 const h1 document.querySelector(h1);//寻找子元素 console.log(h1.querySelectorAll(.…

每天一个数据分析题(三百九十)- 多元线性回归

在多元线性回归中&#xff0c;下列哪项可以缓解多重共线性问题&#xff1f; A. 取对数 B. 平方 C. 去除异常值 D. 逐步回归 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python&#xff0c;SQL&am…

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南

从入门到精通&#xff1a;使用Python的Watchdog库监控文件系统的全面指南 引言Watchdog库概述核心组件工作原理 快速开始&#xff1a;设置Watchdog安装Watchdog创建一个简单的监控脚本设置和启动Observer 事件处理&#xff1a;如何响应文件系统的变化基本事件处理处理复杂的场景…

论文生成新纪元:探索顶尖AI写作工具的高效秘诀

在学术探索的征途中&#xff0c;AI论文工具本应是助力前行的风帆&#xff0c;而非让人陷入困境的漩涡。我完全理解大家在面对论文压力的同时&#xff0c;遭遇不靠谱AI工具的沮丧与无奈。毕竟&#xff0c;时间可以被浪费&#xff0c;但金钱和信任却不可轻弃。 作为一名资深的AI…

@Transactional(rollbackFor = Exception.class)注解

当作用于类上时&#xff0c;该类的所有 public 方法将都具有该类型的事务属性&#xff0c;同时&#xff0c;我们也可以在方法级别使用该标注来覆盖类级别的定义。 在项目中&#xff0c;Transactional(rollbackForException.class)&#xff0c;如果类加了这个注解&#xff0c;那…

Java使用Graphics2D画图,画圆,矩形,透明度等实现

背景 如上图&#xff0c;需要使用Java生成一个图片&#xff0c; 并以base64编码的形式返回给前端展示。 使用Graphics2D类&#xff0c;来进行画图&#xff0c;其中需要画方框、原型、插入图标、写入文字等&#xff0c;同时需要设置透明度等细节点 环境&#xff1a;Jdk17&#…

Java面试八股之JVM内存泄漏按照发生的方式可以分为哪几类

JVM内存泄漏按照发生的方式可以分为哪几类 常发性内存泄漏&#xff08;Frequent Memory Leak&#xff09; 这类内存泄漏发生的代码会被频繁执行&#xff0c;每次执行时都会导致一块或多块内存无法被回收。由于泄漏行为重复发生&#xff0c;故称为常发性。这类泄漏通常比较容易…

下一代广域网技术2:SRv6

2.SRv6 SR架构设计之初&#xff0c;就为SR数据平面设计了两种实现方式&#xff1a;一种是SR-MPLS&#xff0c;其重用了MPLS数据平面&#xff0c;可以在现有IP/MPLS网络上增量部署&#xff1b;另一种是SRv6&#xff0c;使用IPv6数据平面&#xff0c;基于IPv6路由扩展头进行扩展…

Docker部署常见应用之Oracle数据库

文章目录 安装部署参考文章 安装部署 使用Docker安装Oracle数据库是一个相对简便的过程&#xff0c;可以避免在本地环境中直接安装Oracle数据库的复杂性。 安装Docker环境&#xff1a;确保你的系统上已经安装了Docker&#xff0c;并且Docker服务正在运行。具体的安装方法可以根…

使用North自部署图床服务

图床 图床可以把图片转为链接&#xff0c;从而方便我们书写、分享博客&#xff0c;目前图床主要分为以下几类: 利用 Git 仓库存储对象存储&#xff08;OSS、COS、七牛云等&#xff09;免费公共图床&#xff08;SM.MS、聚合图床、ImgTP、Postimage等&#xff09; 但上述图床都…

低应变复习题

1.比较临塑荷载、临界荷载和极限荷载的大小( ) A、临塑荷载<临界荷载<极限荷载 B、临塑荷载>临界荷载<极限荷载 C、临塑荷载<临界荷载>极限荷载 D、临塑荷载>临界荷载>极限荷载 参考答案:A 2.面关于低应变反射波法的描述,正确的是:( ) A、反射…

【杂记-浅谈BGP边界网关协议】

BGP边界网关协议 一、BGP边界网关协议概述二、BGP的特点及与IGP的区别三、BGP的路由属性四、BGP协议中使用的报文 一、BGP边界网关协议概述 1、BGP&#xff0c;Border Gateway Protocol&#xff0c;即边界网关协议&#xff0c;是一种在自治系统&#xff08;AS&#xff09;之间…

Websocket实现方式二——注解方式

添加Websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>根据ServerEndpoint注解注册Websocket Configuration public class AgentWsConfig …

多项式回归(Linear Regression)原理详解及Python代码示例

多项式回归原理详解 多项式回归&#xff08;Polynomial Regression&#xff09;是线性回归&#xff08;Linear Regression&#xff09;的一种扩展形式。它通过在输入变量上添加高次项来拟合非线性关系。虽然多项式回归本质上还是线性模型&#xff0c;但它允许模型在输入特征的多…

if action和Switch之间该怎么选择?

1. Switch 2. If及If Action Subsystem 3.结论 元素很多&#xff0c;用switch 元素少&#xff0c;用if或switch 如果...很多&#xff0c;用if

职业技能大赛引领下大数据专业实训教学的改革研究

随着信息化时代的加速发展&#xff0c;大数据专业作为新兴的热门领域&#xff0c;正日益成为高等职业教育体系中不可或缺的一部分&#xff0c;其承担着为社会培养大批具有高素质应用技能的大数据技术人才的重任。职业技能大赛作为检验和提升学生技能水平的有效平台&#xff0c;…

web学习笔记(六十九)vue2

1. vue2创建脚手架项目 &#xff08;1&#xff09;在cmd窗口输入npm install -g vue/cli命令行&#xff0c;快速搭建脚手架。 &#xff08;2&#xff09; 创建vue2项目 &#xff08;3&#xff09; 选择配置项目&#xff0c;最下面的选项是自己重新配置&#xff0c;第一次创建v…

使用mmdetection遇到的一些问题总结

【问题1】 No module named ‘mmcv._ext’ 应该安装mmcv-full 而不是mmcv 【问题2】cannot import name ‘Config‘ from ‘mmcv‘ 原因是mmcv的版本太高两种解决方案&#xff1a;1&#xff09;降低mmcv版本。2&#xff09;将 from mmcv import Config, DictAction 修改为 fro…