首页 > 其他分享 >第四节 小组学习

第四节 小组学习

时间:2023-07-13 16:00:13浏览次数:34  
标签:status 10 小组 学习 小贝 time memory Accepted 第四节

由于没讲课所以就把写的两篇题解发上

开营测试 B 题小贝的饭量题解

题目描述

小贝现在上六年级,正是长身体的时候,小贝的妈妈给小贝规定了每天要吃的饭量。

小贝要连续吃 \(n\) 天的饭,有 \(n + 1\) 个碗,第 \(i\) 个碗的容量为 \(a_i\),所有的碗每天都会重新盛满饭。小贝妈妈规定小贝在第 \(i\) 天要吃第 \(i\)、\(i + 1\) 两碗饭。而小贝的饭量有限,每天最多只能吃 k 的饭量。但是小贝妈妈永远都觉得小贝吃的不够多,以至于可能会有小贝吃不下的剩饭。

浪费粮食可耻!现在小贝请你帮他调整序列 \(a\) 变为 \(a′\),也就是减少一些碗的容量(可以不减),使得小贝每天吃饭的总量不会超过 k。但是减去的容量总和不能太大,否则小贝妈妈会觉得小贝是故意不想吃饭。

请你回答满足条件的序列 \(a′\),表示调整之后每个碗的容量,并且减去的容量总和要最小

不同的碗减去的容量可以不一样,最后每个碗的容量不可以是负数!

如果有多个满足条件的序列 \(a′\) ,则输出 字典序最大 的那一个。

假设序列 \(x\) 和序列 \(y\) 都符合要求,则序列 \(x\) 的字典序比序列 \(y\) 的字典序大,当且仅当存在一个 \(i\) 满足

  • \(1≤i≤n+1\)
  • \(x_i>y_i\)
  • 对于所有的 j(1≤j<i) 均有 \(x_j=y_j\)

输入格式

第 \(1\) 行 \(2\) 个正整数 \(n,k\)。

第 \(2\) 行 \(n+1\) 个正整数表示序列 \(a\)。

输出格式

输出一行 \(n+1\) 个整数,表示调整后的序列 \(a′\)。

样例

Input 1

5 6 3 4 2 7 3 1

Output 1

3 3 2 4 2 1

Input 2

5 6 7 4 3 7 2 8

Output 2

6 0 3 3 2 4

数据范围

前 50% : \(1≤n≤2×10^3\) , \(1≤a_i,k≤10^4\)
后 50% : \(1≤n≤2×10^5\), \(1≤a_i,k≤10^4\)

样例解释

第 \(1\) 个样例中

第 \(2\) 个碗容量减少了 \(1\),第 \(4\) 个碗容量减少了 \(3\),第 \(5\) 个碗容量减少了 \(1\)。

总共减少了 \(5\) 的容量,这是最少的减少容量之和。

思路

此题重点就是输出字典序最大的。

编译结果
compiled successfully
time: 158ms, memory: 1136kb, score: 100, status: Accepted
> test 01: time: 1ms, memory: 1136kb, points: 10, status: Accepted
> test 02: time: 1ms, memory: 1136kb, points: 10, status: Accepted
> test 03: time: 1ms, memory: 1136kb, points: 10, status: Accepted
> test 04: time: 1ms, memory: 1136kb, points: 10, status: Accepted
> test 05: time: 1ms, memory: 1136kb, points: 10, status: Accepted
> test 06: time: 24ms, memory: 1136kb, points: 10, status: Accepted
> test 07: time: 35ms, memory: 1136kb, points: 10, status: Accepted
> test 08: time: 53ms, memory: 1136kb, points: 10, status: Accepted
> test 09: time: 18ms, memory: 1136kb, points: 10, status: Accepted
> test 10: time: 23ms, memory: 1136kb, points: 10, status: Accepted
#include<iostream>
using namespace std;
#define MAXN 200005

int n, a[MAXN], k;

int main() {
	cin >> n >> k;
	for(int i = 1; i <= n + 1; i ++) cin >> a[i];
	for(int i = 1; i <= n; i ++) {
		if(a[i] + a[i + 1] > k)
			if(a[i] > k) a[i] = k, a[i + 1] = 0;
			else a[i + 1] -= a[i] + a[i + 1] - k;
		else continue;
	}
	for(int i = 1; i <= n + 1; i ++) cout << a[i] << " ";
	return 0;
}

开营测评 D 题小贝的影分身题解

题目描述

小贝是一名忍者,他所在的仓前村出现了一名叛忍,叛忍藏匿在仓前村的某一个位置,现在组织要求你去追捕这名叛忍。小贝刚学会了影分身,所以他不用亲自出手,只需要派遣分身去执行任务即可。小贝可以在某些位置召唤分身,召唤的分身会赶往叛忍所在的位置实行抓捕。每个分身需要相对应的查克拉能量。此叛忍实力十分强大,所以小贝会召唤尽可能多的能够到达叛忍位置的分身,在满足这一前提下,希望消耗的查克拉能量最少。

​ 整个仓前村可以看作一个 \(n×m\) 的地图,’#‘ 表示障碍物,'.' 表示空地,’O‘ 表示叛忍,'X' 表示小贝可以召唤分身的位置。相邻位置(四连通)之间的距离为 \(1\),每个分身所需要的查克拉能量值为该分身赶路的路程长度。如果有的分身位置无法到达叛忍所在地,则这些位置不必召唤分身。

​ 请你帮小贝计算,需要放置几个分身,并且最少一共需要多少查克拉能量值。

输入格式

第 \(1\) 行 \(2\) 个正整数 \(n 和 m\)。

接下来 \(n\) 行表示仓前村 \(n×m\) 的地图。

输出格式

一行两个整数,分别表示 需要派遣的分身数量 和 最少的一共需要的查克拉能量值。

样例

Input 1

4 3
O#X
X..
.X#
.#X

Output 1

3 8

数据范围
前 50%: \(1≤n,m≤50\)
后 50%: \(1≤n,m≤2000\)

思路

首先很容易看出此题是个搜索, 但他是深搜还是广搜?第一问要求分身数量, 很显然深搜和广搜都可以轻易完成此问题, 而第二问最少能量值就需要求最短路的路径长, 所以需用广搜完成搜索, 并在搜索过程中进行标记每个点到终点的最短路径长。

有了这个思路, 就很容易可以写出广搜代码了。

编译结果
compiled successfully
time: 500ms, memory: 23908kb, score: 100, status: Accepted
> test 01: time: 1ms, memory: 7524kb, points: 10, status: Accepted
> test 02: time: 1ms, memory: 3740kb, points: 10, status: Accepted
> test 03: time: 1ms, memory: 9672kb, points: 10, status: Accepted
> test 04: time: 1ms, memory: 9616kb, points: 10, status: Accepted
> test 05: time: 1ms, memory: 7420kb, points: 10, status: Accepted
> test 06: time: 110ms, memory: 23908kb, points: 10, status: Accepted
> test 07: time: 69ms, memory: 16928kb, points: 10, status: Accepted
> test 08: time: 188ms, memory: 23808kb, points: 10, status: Accepted
> test 09: time: 91ms, memory: 19680kb, points: 10, status: Accepted
> test 10: time: 37ms, memory: 19484kb, points: 10, status: Accepted
#include<iostream>
#include<queue>
using namespace std;
#define MAXN 2005

int n, m, x, y, ans1 = 0, ans2 = 0, num = 0;
int a[MAXN][MAXN];
char mp[MAXN][MAXN];
bool vis[MAXN][MAXN];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};

struct node {
	int qx, qy, num;
};

void bfs(int x, int y) {
	queue<node> q;
	q.push({x, y, 0});
	a[x][y] = 0;
	vis[x][y] = true;
	while(!q.empty()) {
		for(int i = 0; i < 4; i ++) {
			node p = q.front();
			int xx = p.qx + dx[i], yy = p.qy + dy[i];
			if(xx > n || xx < 1 || yy > m || yy < 1 || vis[xx][yy] || mp[xx][yy] == '#') continue;
			a[xx][yy] = p.num + 1;
			if(mp[xx][yy] == 'X') ans1 ++, ans2 += a[xx][yy];
			q.push({xx, yy, p.num + 1});
			vis[xx][yy] = true;
		}
		q.pop();
	}
}

int main() {
	cin >> n >> m;
	for(int i = 1; i <= n; i ++) 
		for(int j = 1; j <= m; j ++) {
			cin >> mp[i][j];
			if(mp[i][j] == 'O') x = i, y = j; 
		}
	bfs(x, y);
	cout << ans1 << " " << ans2;
	return 0;
}

标签:status,10,小组,学习,小贝,time,memory,Accepted,第四节
From: https://www.cnblogs.com/So-noSlack/p/17551147.html

相关文章

  • 虚树 学习笔记
    虚树学习笔记引入我们在解决树上问题时,往往都是对整棵树进行处理,或者每次询问都对一个点、点对进行处理,这类题型一般都可以通过dp、树剖解决;然而,有一类问题要求我们每次对树上一些关键点进行处理。这类问题的特点就是询问次数多,而询问的点的总数不多。可如果我们每次都把整棵......
  • 学习霍夫曼编码
    霍夫曼编码广泛用于数据压缩算法,其重要性不言而喻。内容:写一个程序读ASCII文件,统计各字符的频率并制定霍夫曼编码表,最后将此文件的内容根据编码表翻译为二进制文件,计算压缩率。代码清单:#include...typedefstruct{floatweight;intparent,lc,rc;}node;#define......
  • office学习笔记
    目录Excel函数使用VLOOKUP制作四象限图wordPowerPointExcel函数使用VLOOKUP使用说明:https://support.microsoft.com/zh-cn/office/vlookup-函数-0bbc8083-26fe-4963-8ab8-93a18ad188a1功能:需要在表格或区域中按行查找内容时,请使用VLOOKUP。说明:在这一最简单的形式中,VLOOK......
  • vim学习笔记
    指导文档https://cloud.tencent.com/developer/beta/article/2096379常用的命令1、行号::setnu#缩写,显示行号:setnumber#全写,显示行号:setnonu#缩写,取消显示行号:setnonumber#全写,取消显示行号2、删除:dd #删除一行echo"">x......
  • shell脚本学习笔记
    目录执行一个shell脚本变量赋值引用高级变量交互式shell数值计算test命令中括号判断符默认变量$0~$n$(())、$()、``、${}、''、""、()、(())、[]、[[]]、{}条件判断-与或非函数循环标准输入输出整数比较&字符串比较shell脚本中调用另一个shell脚本的三种方式:fork、exec、......
  • psql学习笔记
    目录Q:命令行执行文件里面的语句Q:docker本地运行psqlQ:常用命令Q:windows启动命令Q:统计数据库或表的磁盘空间占用Q:查询psql中的表结构信息Q:命令行执行文件里面的语句psql-Ugalax-W"wei***@123"-ddb_name-p5432-fxxx.sqlQ:docker本地运行psql1、获取最新的postg......
  • python学习笔记:第九章异常
    1.1异常是什么python使用异常对象来表示异常状态,并在遇到错误时引发异常。异常对象未被处理,程序将终止并显示一条错误信息。我们可以通过各种方法引发和捕获错误,并采取对应措施。1.2将“错误”变成异常自主地引发异常1.2.1raise语句我们通过预测异常可能发生的位置,通过ra......
  • Vue 学习 Day2
    摘要:动态属性的限制当使用DOM内嵌模板(直接写在HTML文件里的模板)时,我们需要避免在名称中使用大写字母,因为浏览器会强制将其转换为小写: <a:[someAttr]="value">...</a> “someAttr”属性而非“someattr”,这段代码将不会  ......
  • 关于学习的方法定律
    关于学习的方法定律定律1人们往往善于从事情的内容学习,而不善于从事情本身学习。公司的PLDP/PMDP培训效果很好,参加的人学到了如何做一个合格的PL/PM,却没有学会如何做好培训。从事情本身学习,是向别人学习的关键。定律2人们往往善于从失败中学习,而不善于从成功中学习。一件事......
  • 干货 | 深入理解深度学习中的激活函数
    理解深度学习中的激活函数在这个文章中,我们将会了解几种不同的激活函数,同时也会了解到哪个激活函数优于其他的激活函数,以及各个激活函数的优缺点。1.什么是激活函数?生物神经网络是人工神经网络的起源。然而,人工神经网络(ANNs)的工作机制与大脑的工作机制并不是十分的相似。不过在我......