2018.12.30【NOIP提高组】模拟A组

2023-11-10 11:10
文章标签 模拟 30 提高 noip 2018.12

本文主要是介绍2018.12.30【NOIP提高组】模拟A组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

去上海了,所以没有比赛,不过还是看了题目


JZOJ 5353 村通网

题目

一座建筑有网,当且仅当满足以下至少一个条件:
1、直接连网,花费为 A A A
2、连接有网的建筑,花费为 B B B×两者曼哈顿距离。
N N N座建筑,知道所有建筑的坐标,问最少要多少费用才能达到目的。


分析

那么这道题就是一道比较裸的最小生成树,由于任意点间都能连边,所以说kruskal没有什么大优势,在此用的是裸的prim,那么怎么做呢,我的想法是建立一个虚拟点,那么其他点的费用就是A,然后在其他点跑最小生成树,所连的边权和就是答案


代码

#include <cstdio>
#include <climits>
#include <cctype>
#include <algorithm>
#define rr register
#define fre(t) freopen(t".in","r",stdin),freopen(t".out","w",stdout)
using namespace std;
int n,t,ans,dis[1001],x[1001],y[1001]; bool v[1001];
inline signed iut(){rr int ans=0,f=1; rr char c=getchar();while (!isdigit(c)) f=(c==45)?-f:f,c=getchar();while (isdigit(c)) ans=ans*10+(c-48),c=getchar();return ans*f;
}
inline void mmin(int &a,int b){if (a>b) a=b;}
inline signed abs(int x){return x<0?-x:x;}
signed main(){fre("pupil"); dis[0]=INT_MAX; n=iut();fill(dis+1,dis+1+n,iut()); t=iut();for (rr int i=1;i<=n;++i) x[i]=iut(),y[i]=iut();for (rr int i=1;i<=n;++i){rr int k=0;for (rr int j=1;j<=n;++j)if (!v[j]&&dis[j]<dis[k]) k=j;ans+=dis[k]; v[k]=1;for (rr int j=1;j<=n;++j) if (!v[j]) mmin(dis[j],(abs(x[k]-x[j])+abs(y[k]-y[j]))*t);}printf("%d",ans);return 0;
}

JZOJ 5354 导弹拦截

题目

在这里插入图片描述


分析

然而,第一问的动态规划还是按原来的打,但是第二问就尴尬了,本来想照着老样子打,没想到WA了
后来发现第二问竟然是匈牙利算法,求最大独立集,当第一问 i i i点由 j j j点推来,那么从 i i i j j j连边,跑匈牙利就可以输出答案了。但是还是WA了!
导弹同时飞来,这可真是要命,那么可以提前对一个坐标排序,然后按照刚才的方法,AC


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#include <cstring>
#define rr register
#define fre(t) freopen(#t".in","r",stdin),freopen(#t".out","w",stdout)
using namespace std;
struct node{int y,next;}e[500001]; 
struct rec{int x,y,z;}a[1001]; bool cover[1001];
int n,dp[1001],ans,link[1001],ls[1001],k=1;
inline signed iut(){rr int ans=0,f=1; rr char c=getchar();while (!isdigit(c)) f=(c==45)?-f:f,c=getchar();while (isdigit(c)) ans=ans*10+(c-48),c=getchar();return ans*f;
}
bool cmp(rec i,rec j){return i.x<j.x;}
inline signed dfs(int x){for (rr int i=ls[x];i;i=e[i].next)if (!cover[e[i].y]){rr int q=link[e[i].y];link[e[i].y]=x; cover[e[i].y]=1;if (!q||dfs(q)) return 1;link[e[i].y]=q;}return 0;
} 
signed main(){fre(missile); n=iut();for (rr int i=1;i<=n;++i) a[i]=(rec){iut(),iut(),iut()};sort(a+1,a+1+n,cmp);for (rr int i=1;i<=n;++i){dp[i]=1;for (rr int j=1;j<i;++j)if (a[j].x<a[i].x&&a[j].y<a[i].y&&a[j].z<a[i].z)dp[i]=dp[i]>dp[j]+1?dp[i]:dp[j]+1,e[++k]=(node){j,ls[i]},ls[i]=k;//动态规划ans=ans>dp[i]?ans:dp[i];}printf("%d\n",ans); ans=0;for (rr int i=1;i<=n;++i){memset(cover,0,sizeof(cover));ans+=dfs(i);}printf("%d",n-ans);//最大独立集,用节点数-最大匹配return 0;
}

JZOJ 5355 保命

声明

因为JZOJ无人AC,且暂时不想做此题(斜率优化),所以说暂时不做


后续

未完待续

这篇关于2018.12.30【NOIP提高组】模拟A组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382278

相关文章

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

键盘快捷键:提高工作效率与电脑操作的利器

键盘快捷键:提高工作效率与电脑操作的利器 在数字化时代,键盘快捷键成为了提高工作效率和优化电脑操作的重要工具。无论是日常办公、图像编辑、编程开发,还是游戏娱乐,掌握键盘快捷键都能带来极大的便利。本文将详细介绍键盘快捷键的概念、重要性、以及在不同应用场景中的具体应用。 什么是键盘快捷键? 键盘快捷键,也称为热键或快捷键,是指通过按下键盘上的一组键来完成特定命令或操作的方式。这些快捷键通常涉及同

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

如何提高 GitHub 的下载速度

如何提高 GitHub 的下载速度 文章目录 如何提高 GitHub 的下载速度1. 注册账号2. 准备好链接3. 创建仓库4. 在码云上下载代码5. 仓库更新了怎么办 一般来说,国内的朋友从 GitHub 上面下载代码,速度最大是 20KB/s,这种龟速,谁能忍受呢? 本文介绍一种方法——利用“码云”,可以大大提高下载速度,亲测有效。 1. 注册账号 去“码云”注册一

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数