首页 > 其他分享 >【赛后反思】【LGR-172-Div.4】洛谷入门赛 #19 赛后反思

【赛后反思】【LGR-172-Div.4】洛谷入门赛 #19 赛后反思

时间:2024-01-22 17:13:28浏览次数:25  
标签:洛谷 int ll long lld% 反思 饼干 赛后 define

【LGR-172-Div.4】洛谷入门赛 #19 赛后反思

今日推歌:Cagayake《無名のエヌ (feat. 重音テト & 可不)》

不正解だ 不正解だった
中途半端な身体は

不是很火的一首歌,连个翻译都没有(悲


Before

最后 5min AK 了,第一次 AK,虽然是入门赛但还是很有成就感的:

image

省流:STL大胜利


A 分饼干I

最少的两盒相加,这样和剩下的一盒差距最小,然后再把多的分给 Z,少的分给 yz 就可以了

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
int a[4], b, c; 
int main() {
	scanf("%d%d%d", a + 1, a + 2, a + 3);
	sort(a + 1, a + 4); // 用的 sort 来寻找最少的两盒
	b = a[1] + a[2], c = a[3];
	printf("%d %d\n", max(b, c), min(b, c));
	return 0;
}

B 分饼干II

赛时想了好久,后来想到一句话:

打表出奇迹

下表中 \(N_{min}\) 代表 \(k\) 为一定值时,能让每名小朋友拿到的饼干数量都不一样多的最小总饼干数

\(k\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) ... \(n\)
\(N_{min}\) 1 3 6 10 15 21 28 ... \(\frac{n(n + 1)}{2}\)

不难发现,当饼干数 \(\ge N_{min}\) 时,一定能让每名小朋友都拿到不一样数量的饼干。

为什么呢?

当有 \(k\) 名小朋友时,分别分给他们 \(1,2,3,...,k-1,k\) 块饼干,这样既能保证每个人分到的饼干数都不同,又能保证饼干总数最少。此时易得饼干总数为 \(\frac{n(n + 1)}{2}\).

也就是说,只要饼干总数大于等于 \(\frac{n(n + 1)}{2}\),一定能给每个人分到不同数量的饼干。

因为本题主要是思维难度,代码不给注释

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
int T;
ll n, k;
int main() {
	scanf("%d", &T);
	while(T--) {
		scanf("%lld%lld", &n, &k);
		if(n >= k * (k + 1) / 2) puts("Yes");
		else puts("No");
	}
	return 0;
}

C 跳房子

一开始以为是前年(2022)暑假 OJ 上一场模拟赛的 T1,仔细一看其实只是一道简单的模拟。

如果先跳后判断的话第一个点会 WA,因为根本不需要跳就已经胜利了。

↑来自机房 lcj 老师的发现

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e6 + 5;
int n, a[N], now = 1, tot;
int main() {
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i) scanf("%d", a + i);
	while(now < n) ++tot, now += a[now];
	//↑步数+1,按照题意跳跃,如果跳了出去就结束循环
	if(now == n) puts("Yes"); //胜利
	else puts("No");
	printf("%d\n", tot); //输出步数
	return 0;
}

D 区间函数最大值

十年OI一场空,不开 long long 见祖宗

把符合条件的每个结果都扫一遍,比较大小。需要注意的是多项式的每一项都要取模。

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
ll a, b, c, d, e, f, g, p, x, xx, y, yy, maxa;
int main() {
	scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld", &a, &b, &c, &d, &e, &f, &g, &p, &x, &xx, &y, &yy);
	for(int i = x; i <= xx; ++i) for(int j = y; j <= yy; ++j) maxa = max(maxa, ((a * i * i * i) % p + (b * j * j * j) % p + (c * i * i * j) % p + (d * i * j * j) % p + (e * i * j) % p + (f * i) % p + (g * j) % p) % p);
	// ↑压行严重所以比较丑,实际上就是循环比较每个 f(x,y).
	printf("%lld\n", maxa);
	return 0;
}

E 小跳蛙

我的思路是用 \(a_i\) 来储存 \(i\) 号小跳蛙在第 \(a_i\) 个位置上。用 \(emp\) 来储存空位的位置。(实际上可以用 \(a_0\) 或者 \(a_n\) 来代替这个变量来节省空间)

每次小跳蛙调到空位上时,就交换小跳蛙的位置和空位的位置。

需要注意最后输出的时候需要再存一遍每个位置上都是编号为多少的小跳蛙(或许还能优化……?

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e6 + 5;
int n, a[N], b[N], cnt, emp;
int main() {
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i) {
		scanf("%d", &cnt);
		a[cnt] = i; // 编号为 cnt 的小跳蛙在第 i 号位置上
		if(!cnt) emp = i; // 标记空位的位置
	}
	for(int i = 1; i < n; ++i) swap(a[i], emp); // 交换空位的位置和小跳蛙的位置
	for(int i = 1; i < n; ++i) b[a[i]] = i; // 第 a[i] 号位置上是第 i 只小跳蛙
	for(int i = 1; i <= n; ++i) printf("%d ", b[i]);
	return 0;
}

F 图像变换

完了这个代码忘传机房群里了

可以直接模拟,把“重复 \(k_2\) 次”看成每行在横行上重复 \(k\) 次,重复后得到的新一行在纵向上重复 \(k\) 次

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
int n, m, k;
char ch[105][105];
int main() {
	scanf("%d%d%d", &n, &m, &k);
	for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) cin >> ch[i][j];
	for(int i = 1; i <= n; ++i) {
		for(int o = 1; o <= k; ++o) {
			for(int j = 1; j <= m; ++j) for(int l = 1; l <= k; ++l) printf("%c", ch[i][j]);
			// ↑横向复制
			putchar('\n');
		}
		//↑纵向复制
	}
	return 0;
}

标签:洛谷,int,ll,long,lld%,反思,饼干,赛后,define
From: https://www.cnblogs.com/Kiichi/p/17980479/rumen19kaohoufansi

相关文章

  • 洛谷 P9843 [ICPC2021 Nanjing R] Paimon Sorting 题解
    Descirption给出一个排序算法(用伪代码表示):SORT(A)forifrom1tonforjfrom1tonifa[i]<a[j]Swapa[i]anda[j]算出对于一个序列\(A=a_1,a_2,\cdots,a_n\)的所有前缀\(A_k=a_1,a_2,\cdots,a_k\)(\(1\lek\len\)),\(\operatorname{SORT}(A_......
  • 洛谷入门赛 #19 题解
    比赛传送门A-分饼干I将三盒饼干按数量排序。若较小的两盒饼干数之和大于另一盒饼干,则将较小的两盒饼干奖励给第一名,另一盒奖励给第二名;若较大的一盒饼干数大于另外两盒之和,则将较大的一盒奖励给第一名,另外两盒奖励给第二名。B-分饼干II每个人分到的饼干数都不同,即可以看......
  • [OI] 洛谷P1001过河卒题解
    [NOIP2002普及组]过河卒题目描述棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点。卒行走的规则:可以向下、或者向右。同时在棋盘上\(C\)点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,\(A\)点\((0......
  • 【LGR-172-Div.4】洛谷入门赛 #19 题解
    比赛链接:\(link\)T1分饼干I题目描述洛谷网校举行了期末考试,同学们经过课程的学习,考出了优异的成绩。Z在考试中获得了第一名,yz在考试中获得了第二名,老师决定买一些饼干奖励两名小朋友。老师买了三盒饼干,第一盒有\(a\)块饼干,第二盒有\(b\)块饼干,第三盒有\(c\)块饼干......
  • 洛谷 P9869 [NOIP2023] 三值逻辑 题解
    Solution模拟程序,容易发现每个点最后的取值都是定值或一个点的初始值(可能是该值取反)。最后是定值的点可以确定初始值,最后取值由该点决定的点也可以确定取值。求出这些取值,答案加上取之为U的点的个数。即第\(i\)个点最后的取值是\(to_i\)的初始值,\(sg_i\)表示是否取反,那......
  • 洛谷 P9751 [CSP-J 2023] 旅游巴士 题解
    Solution能在起点等\(k\)的非负整数倍相当于能在任意点等\(k\)的非负整数倍。由于离开的时间要是\(k\)的负整数倍,将每个点拆成\(k\)个点,\(dis_{i,j}\)表示到了第\(i\)个点长度\(\bmod\text{}k\equivj\)的最短路径。转移时若时间未到,直接在原地等\(k\)的负整......
  • 洛谷 P9745 「KDOI-06-S」树上异或 题解
    Solution树形DP好题。PartI部分分类比下文为简单,我们称一个连通块的权值为连通块内点的异或和。考虑链的部分分,显然可以设\(f_{i}\)是前\(i\)个点所有断边方案的权值和,对于每个点枚举上一条断的边转移。令\(s_i=\bigoplus_{j=1}^{i}a_j\),则\(f_i=\sum_{j=0}^{i-1}(s......
  • 洛谷 P9579「Cfz Round 1」Elevator 另类题解
    一个赛时想到的另类DP做法。Solution容易将原题转化为一个人乘电梯每次上下一层。对于\(a_i<b_i\)是好处理的,记\(\displaystylem=\max_{1\leqi\leqn}\{a_i,b_i\}\),只需要跑到\(m\)即可解决所有这种条件。对于\(a_i>b_i\)的条件,我们除了到\(m\)外,还需要额外地从......
  • 洛谷 P9575 「TAOI-2」喵了个喵 Ⅳ 题解
    Solution先求出所有数的最大公约数\(d\),然后将每个数约去\(d\)。将约去后的数均分,约去前的数也均分。下文讨论的数都是约去\(d\)后的数(包括取的\(x\))。\(n\)为偶数,取\(x=1\),对半分即可。\(n\)不为偶数,且有奇数个偶数。取\(x=2\),设奇数和偶数分别有\(x,y\)个,B组取......
  • 洛谷 P9915 「RiOI-03」3-2 题解
    Preface为啥有蓝啊,这题在机房里15min左右就切了,反倒是2A做了1h。。Solution将矩阵逆时针旋转\(90^{\circ}\),你会发现这是一棵线段树,是父亲左儿子的节点颜色是\(0\),是右儿子的节点颜色是\(1\)。容易发现,联通块一定是一条链。具体地,你从给定的点向上跳,跳到第一个与自己......