首页 > 其他分享 >台州市2024青少年信息学奥赛复赛初中组

台州市2024青少年信息学奥赛复赛初中组

时间:2024-06-21 15:54:30浏览次数:32  
标签:le 题目 FF int 2024 leq 奥赛 宝物 复赛

初中组第一题

【题目概述】

用数字 \(4,5,6\) 去组合出一个给定的数字 \(n\)(\(8 \le n \le 10^5\)),用的数字尽可能多,在满足前者的条件下,数越大越好,分别输出 \(4,5,6\)的数目。

【题目解析】

第一要求:用的数字越多越好。
和相等的情况下,每一个选择的数要尽可能小,所以数量最多\(\le n/4\),考虑余数
\(n\) % 4 = 0 => n/4      0  0

\(n\) % 4 = 1 => n/4 - 1  1  0

\(n\) % 4 = 2 => n/4 - 1  0  1

\(n\) % 4 = 3 => n/4 - 2  1  1
根据余数情况一换一,保证第一要求的同时,满足第二要求

【参考代码】

#include<bits/stdc++.h>
using namespace std;
int n,a,b,c;
int main(){
	cin>>n;
	a=n/4;
	if (n % 4 == 1 || n % 4 == 3)
		a--, b++;
	if (n % 4 == 2 || n % 4 == 3)
		a--, c++;
	cout << a << ' ' << b << ' ' << c;
	return 0;
}

初中组第二题

【题目概述】

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点\(N\)(\(0≤N≤100000\)),牛位于点\(K\)(\(0≤K≤100000\))。农夫有两种移动方式:

1、从\(X\)移动到\(X-1\)或\(X+1\),每次移动花费一分钟

2、从\(X\)移动到\(2*X\),每次移动花费一分钟

假设农场的范围是0-100000,牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

【题目解析】

BFS裸题原题,通过队列找到距离点\(n\)位0,1,2,3,...距离的所有点,第一次到达\(k\)的即为答案

【参考代码】

#include<iostream>
#include<queue>
using namespace std;

int n, k;
int s[100050];
bool map[100050];

queue<int> q;

int main()
{
	cin >> n >> k;
	for (int i = 0; i < 100050; i++) s[i] = -1;
	s[n] = 0;
	map[n] = true;
	queue<int> q;
	q.push(n);
	while (q.size() > 0) {
		int a = q.front();
		q.pop();
		if (a + 1 <= 100000) {
			if (!map[a + 1]){
				q.push(a + 1);
				map[a+1] = true;
				s[a + 1] = s[a] + 1;
			}
		}
		if (0 <= a - 1) {
			if (!map[a - 1]){
				map[a-1] = true;
				q.push(a - 1);
				s[a - 1] = s[a] + 1;
			}
		}
		if (a * 2 <= 100000) {
			if (!map[a * 2]){
				map[a*2] = true;
				q.push(a * 2);
				s[a * 2] = s[a] + 1;
			}
		}
	}
	cout << s[k] << endl;
 	return 0;
}

初中组第三题

【题目概述】

终于,破解了千年的难题。小 FF 找到了王室的宝物室,里面堆满了无数价值连城的宝物。

这下小 FF 可发财了,嘎嘎。但是这里的宝物实在是太多了,小 FF 的采集车似乎装不下那么多宝物。看来小 FF 只能含泪舍弃其中的一部分宝物了。

小 FF 对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小 FF 有一个最大载重为 W 的采集车,洞穴里总共有 n 种宝物,每种宝物的价值为 \(v_{i}\),重量为 \(w_{i}\),每种宝物有\(m_{i}\)件。小 FF 希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。

【题目范围】
对于 \(30\%\) 的数据,\(n\leq \sum m_i\leq 10^4\),\(0\le W\leq 10^3\)。
对于 \(100\%\) 的数据,\(n\leq \sum m_i \leq 10^5\),\(0\le W\leq 4\times 10^4\),\(1\leq n\le 100\)。

【题目解析】

多重背包的二进制优化
直接当简单背包问题可解前\(30\%\)的数据,时间复杂度为O(m*w)
二进制优化类似于压缩的思想。一个物品有很多,我们有很多很多的选择方法,可以选1..2..3...n个。那么我们就需要一种很快的选择方法,而不是朴素的暴力筛选。我们选择二进制方法

例如,我们有20个物品,我们如何快速的找出来任意个呢,比如选7个?可以一个一个选出来。也可以事先把物品分成五堆,分别是1,2,4,8,5个硬币,我们只需要选择1+2+4就能选出来7个硬币, 显然任意数都可以通过这五堆中组合选出。这种方法在数据比较大的时候优势尤为明显,将O(n)优化成了O(logn),n个一样的物品就转化成了log2n个不同的物品。
时间复杂度O(nlogmw)

【参考代码】

#include<bits/stdc++.h>
using namespace std;

int n, W, v, w, m;
struct node {
	int v, w;
};
vector<node> vec;
int s[40010];

int main(){
	cin >> n >> W;
	for (int i = 1; i <= n; i++) {
		cin >> v >> w >> m;
		for (int i = 1; i <= m; i *= 2) {
			vec.push_back({v * i, w * i});
			m -= i;
		}
		vec.push_back({v * m, w * m});
	}
	for (int i = 0; i < vec.size(); i++) {
		v = vec[i].v;
		w = vec[i].w;
		for (int j = W; j >= w; j--)
			s[j] = max(s[j], s[j - w] + v);
	}
	int maxn = 0;
	for (int i = 1; i <= W; i++) {
		maxn = max(maxn, s[i]);
	}
	cout << maxn << endl;
	return 0;
}

初中组第四题

【题目概述】

博览馆正在展出由世上最佳的 m 位画家所画的图画。游客在购买门票时必须说明两个数字,a 和 b,代表他要看展览中的第 a 幅至第 b 幅画(包含a,b)之间的所有图画,而门票的价钱就是一张图画一元。
Sept 希望入场后可以看到所有名师的图画。当然,他想最小化购买门票的价格。
请求出他购买门票时应选择的a,b,数据保证一定有解。
若存在多组解,输出 a 最小的那组。

【题目解析】

双指针做法,枚举每一个左边界,找右边界的最小值,一个数组记录当前范围内每个画家的最后一幅画位置在哪,这样前面枚举l的时候去掉l-1的图画,就可以知道当前画家是否依然有图画在范围内,只有当范围内有所有画家的图画。且范围更小才更新答案

【参考代码】

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, m;
int s[N], h[N];
int main(){
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		scanf("%d", &s[i]);
	int minn = n, a = 1, b = n, r = 0, tot = 0;
	for (int l = 1; l <= n; l++) {
		if (l > 1 && h[s[l-1]] == l - 1) {
			h[s[l-1]] = 0;
			tot--;
		}
		while (tot < m && r + 1 <= n) {
			r++;
			if (h[s[r]] == 0) {
				tot++;
			}
			h[s[r]] = r;
		}
		if (tot == m && r - l < b - a)
			a = l, b = r;
	}
	cout << a << ' ' << b << endl;
	return 0;
}

标签:le,题目,FF,int,2024,leq,奥赛,宝物,复赛
From: https://www.cnblogs.com/forleaves/p/18258752

相关文章

  • 2024年史上最难就业季,该如何逆风翻盘?
    前言【2024年被称为最难就业年,1158万大学生面临难题】IT互联网依然是大学生最向往行业,制造业受欢迎度升高智联招聘调研数据显示,2024届求职毕业生期望行业中,IT/通信/电子/互联网、政府/非盈利机构、文化/传媒/娱乐/体育行业位列前三,占比分别为26.4%、9.4%、8.9%。IT互联网......
  • 2024最新AI大模型-LLm八股合集(十二)-Transformer模型
    更多2024最新AI大模型-LLm八股合集可以拉到文末!!!相对位置编码相对位置并没有完整建模每个输入的位置信息,而是在算Attention的时候考虑当前位置与被Attention的位置的相对距离,由于自然语言一般更依赖于相对位置,所以相对位置编码通常也有着优秀的表现。对于相对位置编码来说,......
  • 2024最新最全【网络安全/渗透测试】面试题汇总
    思路流程信息收集漏洞挖掘漏洞利用&权限提升清除测试数据&输出报告复测问题深信服一面:SQL注入防护为什么参数化查询可以防止sql注入SQL头注入点盲注是什么?怎么盲注?宽字节注入产生原理以及根本原因产生原理在哪里编码根本原因解决办法sql里面只有update怎么利用sql如何......
  • IntelliJ IDEA 2024 mac/win版:编程利器,智慧之选
    IntelliJIDEA2024是一款由JetBrains精心打造的集成开发环境(IDE),专为Java等编程语言量身打造,同时支持多种其他语言,为开发者提供了卓越的开发体验。IntelliJIDEA2024mac/win版获取这款IDE凭借其出色的智能化和高效性,赢得了广大开发者的喜爱。IDEA2024不仅提供了丰富的功能......
  • JetBrains GoLand 2024 mac/win版:高效开发,Go无止境
    JetBrainsGoLand2024是一款专为Go语言开发者设计的集成开发环境(IDE),为开发者带来了更加高效、智能和便捷的编程体验。GoLand2024mac/win版获取在代码编辑方面,GoLand2024提供了全行代码补全功能,通过利用先进的深度学习模型,能够智能预测并自动补全整行代码,大大提高了编码速......
  • 牛客网最强Java面试八股文(2024年6月持续更新)
    一、Java基础1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,java运行环境,为java的运行提供了所需环境。具体来说JDK其实包含了JRE,同时还包含了编译java源码的编译......
  • Java面试题及答案整理( 2024年 6 月最新版,持续更新)
    秋招金九银十快到了,发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全~这套互联网Java工程师面试题包括了:MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、Java面试、Spring、微服务、Linux、Springboot、SpringCloud、MQ、Kafka面试专......
  • 2024.6.19 Subspace更名Autonomys后的首次社区会议:Autonomys新任CEO首秀
    本次社区会议为Subspace更名为Autonomys以及新任CEO LabheshPatel赴任后的首次社区会议。会议信息量较多,TimeDao择取重要信息如下:新任CEO介绍主网将会在第三季度末上线,在内部称为“GenesisProject”,每周多次会议确保这一目标的实现。TGE,TokenGenesisEvent,第一个代币......
  • JavaSE 面向对象程序设计进阶 抽象类和接口 2024年详解
    目录抽象类抽象方法抽象类和抽象方法的注意事项​编辑接口如何定义接口注意代码实现​编辑接口中的成员特点接口和类之间的关系1.类与类的关系2.类与接口的关系3.接口与接口的关系​编辑拓展接口中的默认方法接口中的静态方法​编辑接口中的私有方法接口......
  • 2024.6最新版eclipse下载与安装(汉化教程)超详细教程来咯!!!包懂的
    1.eclipse简介        Eclipse是一个开放源代码的集成开发环境(IDE),主要用于Java编程,但也可以通过插件支持其他编程语言,如C/C++、Python、Perl等。Eclipse被广泛应用于企业环境中,特别是在Java社区中,因其强大的功能和灵活性而受到开发者的喜爱。          ......