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

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

时间:2024-02-17 21:55:40浏览次数:35  
标签:洛谷 int ll long const 反思 using 赛后 define

洛谷入门赛 #20 赛后反思

今日推歌:《水与水之歌 feat.绮萱》きくお

呆在这里直到精神恍惚为止
让我们一起快乐地玩耍

我们术术人有自己的《让我们荡起双桨》(大雾


Before

先看结果(是同步赛的成绩,因为前一天晚上我在死磕dfs):

image

省流:
暴力-纯度75%
STL-纯度25%

展开目录

目录


A.射箭

参考上次的做法,先排序,然后把最小的两个相加,看第三人是否大于这个和

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e5 + 5;
int x[3]; 
int main() {
	scanf("%d%d%d", x + 0, x + 1, x + 2);
	sort(x, x + 3);
	if(x[2] > (x[1] + x[0])) puts("1");
	else puts("0");
	return 0;
}

B.酒

三个李白一台戏

考虑把每个李白喝的酒都加起来,然后进行比较,找出喝酒最多的那个。因为只有三个李白甚至可以直接写裸的 if.

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e5 + 5;
double x, y, a[7];
int main() {
	for(int i = 1; i <= 5; ++i) scanf("%lf", a + i);
	scanf("%lf%lf", &x, &y);
	double j = a[1] * x + a[2] * y, q = a[3] * y, k = a[4] * y + a[5];
	if(j >= q && j >= k) printf("1 %.2lf\n", j);
	if(q > j && q >= k) printf("2 %.2lf\n", q);
	if(k > j && k > q) printf("3 %.2lf\n", k);
	return 0;
}

EXTRA

image

image


C.分配工资

先求出分母 \(c\),也就是所有的工资权重之和;再求出分子 \(d\),把卷王所负责的题目工资权重加到一起,最后输出 \(m\cdot\dfrac{d}{c}\).

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e6 + 5;
int n, m, a[N], b[N], c, d;
int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; ++i) scanf("%d%d", a + i, b + i), c += b[i];
	for(int i = 1; i <= n; ++i) if(a[i] == 1) d += b[i];
	printf("%.3lf\n", m * 1.0 / c * d);
	return 0;
}

D.三位数

因为数据范围很小,所以可以直接暴力枚举每一位进行判断。

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e5 + 5;
int d, fl;
int main() {
	scanf("%d", &d);
	for(int i = 1; i <= 9; ++i) 
		for(int j = 0; j <= 9; ++j) 
			for(int k = 0; k <= 9; ++k) 
				if(!((i * 10 + j) % d) && !((j * 10 + k) % d) && !((i * 100 + j * 10 + k) % d)) 
					printf("%d%d%d\n", i, j, k), fl = 1;
	if(!fl) puts("None!");
	return 0;
}

压行真的很丑


E.数字串

image

65pts Solution

找到两个 \(1\) 中间 \(0\) 连续出现最多的次数,之后只要扫到了 \(0\) 的连续出现次数不等于这个次数就输出 No.

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e5 + 5;
int T, n, m, sum, maxs, ss, fl;
string s;
int main() {
	scanf("%d" , &T);
	while(T--) {
		scanf("%d%d", &n, &m);
		cin >> s;
		for(int i = s.find("1") + 1; ; ++i) {
			if(s[i] == '0') ++maxs;
			else break;
		}
		for(int i = 0; i < s.size(); ++i) {
			if(s[i] == '0') ++sum;
			if(sum > maxs || sum > n) {puts("No"); fl = 1; break; }
			if(s[i] == '1') {
				if(ss != 0 && sum < maxs) {puts("No"); fl = 1; break; }
				sum = 0, ++ss;
			}
		}
		if(!fl) puts("Yes");
		sum = maxs = fl = ss = 0;
	}
	return 0;
}

F.小朋友的身高

个人感觉比 \(E\) 和 \(G\) 简单。

预处理一个二维数组 \(A\): \(A_{i,j}\) 代表第 \(i\) 个小朋友在第 \(j\) 年的身高,按照题意输出 \(A_{y,x} - A_{z, x}\) 即可。

警钟长鸣:弄清楚自己两维分别代表的是什么,我就弄混好几次(目移

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e3 + 5;
ll n, m, q, a[N][N], b, x, y, z;
int main() {
	scanf("%lld%lld%lld", &n, &m, &q);
	for(int i = 1; i <= n; ++i) scanf("%lld", &a[i][0]);
	for(int i = 1; i <= m; ++i) {
		for(int j = 1; j <= n; ++j) {
			a[j][i] = a[j][i - 1];
			scanf("%lld", &b);
			a[j][i] += b;
		}
	}
	while(q--) {
		scanf("%lld%lld%lld", &x, &y, &z);
		printf("%lld\n", a[y][x] - a[z][x]);
	}
	return 0;
}

G.翻转和反转

image

50pts Solution

比较优化一点的暴力,但是仍然 \(50pts\).翻转用了 swap,反转则是异或 \(1\).(因为 0 ^ 1 = 1,1 ^ 1 = 0,相当于反转)

代码夹带私货严重:

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e5 + 5;
inline string intp(string s) {
//	cerr << "春风漫草野\n"; 
	for(int i = 0; i < s.size() / 2; ++i) swap(s[i], s[s.size() - i - 1]); 
	return s;
}
inline string istp(string s) {
//	cerr << "三月的天\n"; 
	for(int i = 0; i < s.size(); ++i) s[i] = '0' + ((s[i] - '0') ^ 1);
//	cerr << "千里外不曾相见\n"; 
	return s;
}
int n, q;
string a, b;
int main() {
	scanf("%d%d", &n, &q);
	cin >> a >> b;
//	cout << a << endl;
	for(int i = 0; i < q; ++i) {
//		cerr << "白马过了离原\n";
		if(b[i] == '1') a = intp(a);
		if(b[i] == '2') a = istp(a);
//		cerr << "仰头看纸鸢\n" << a << endl; 
	}
	cout << a << endl;
	return 0;
}

H.陨石

一眼 DP,都怪 K8He(确信

其实是道贪心,从损坏程度最小的开始修,这样一定能修最多。

比 \(E\) 和 \(G\) 简单。

#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
const int N = 1e6 + 5;
int T, n, t, m, a[N], x, ans;
int main() {
	scanf("%d", &T);
	while(T--) {
		scanf("%d%d%d", &n, &t, &m);
		for(int i = 1; i <= n; ++i) scanf("%d", a + i);
		for(int i = 1; i <= m; ++i) scanf("%d", &x), a[x] -= 2;
		sort(a + 1, a + 1 + n, greater<int>());
		for(int i = 1; i <= n; ++i) {
			while(a[i] <= 0) --t, ++a[i];
			if(t >= 0) ++ans;
			else break;
		}
		printf("%d\n", ans);
		ans = 0;
	}
	return 0;
}

After

又被入门赛 AK 了。

标签:洛谷,int,ll,long,const,反思,using,赛后,define
From: https://www.cnblogs.com/Kiichi/p/18018502/lgr175fansi

相关文章

  • 洛谷P6138 [IOI2012] 骑马比武竞赛
    洛谷传送门分析首先可以将骑士比赛这件事视为将一段区间缩为一个点。那么最后剩下的一段区间中每个点一定是有一个区间浓缩而来。展开这个区间,展开后的区间中的每个点也是由一个区间浓缩而来。这样逐步展开,会得到原本的有\(n\)个元素的数组。注意,虽然迟到的还没有加入,但是各区......
  • 选课 洛谷P2014
    传送门\(\Large\textbf{问题描述}\)大学里实行学分。每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分。学生最后的学分是他选修的各门课的学分的总和。每个学生都要选择规定数量的课程。其中有些课程可以直接选修,有些课程需要一定的基础知识,必须在选......
  • 洛谷P6169 [IOI2016] Molecules
    洛谷传送门分析结论:如果存在解,则一定有一个解使得选的数是排序后的一段前缀并上一段后缀。下文所说序列均已排序。引理:对于一个可行解选的某个数,一定可以将其换成序列中的最小数或最大数而使得换完之后还是一个可行解。证明:反证法。假设都不可换。设当前选的所有数的和为\(......
  • 洛谷 P4065 题解
    模拟赛T1,纪念一下第一次场切紫。(话说场上这么多人切是不是都找到原了,就我这么傻想了半天)正难则反,很容易的将题目转化为选择若干种颜色,使这些颜色在原数组中的位置连续。设$pre_i$为颜色$i$最早出现的位置,$suf_i$为颜色$i$最晚出现的位置。假设通过选择若干颜色得到的位......
  • Codeforces Round 926 (Div. 2) 赛后总结
    这场比赛掉了前三场比赛上的分,望周知。SashaandtheBeautifulArray题目大意:一个有n个数的数组,对n个数进行排序,求数组中ai-ai-1(下标从2到n)的和的最大值。分析列出来和式,为an-an-1+an-1-an-2……-a1最后得到an-a1那么an最大,a1最小即可。很容易想到排序。#include<i......
  • 洛谷 P9912 [COCI 2023/2024 #2] Zatopljenje 题解
    首先发现区间中的个数等于\(\texttt{高度大于x的位置的个数}-\texttt{连续两个位置都是大于x的位置的个数}\)。具体令\(H_i=\min(h_i,h_{i+1})(i\in[1,n-1])\),那么对于一次询问答案\(ans=\sum\limits_{i=l}^{r}[h_i>x]-\sum\limits_{i=l}^{r-1}[H_i>x]\),其......
  • 洛谷【算法1-5】 贪心
    P2240【深基12.例1】部分背包问题-洛谷|计算机科学教育新生态(luogu.com.cn)#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=110;intn,t;structnode{intm,v;};boolcmp(nodeaa,nodebb){returnaa.v*bb.m>bb.v*aa.m......
  • 「杂题乱刷」洛谷 P1831
    题目链接一道简单数位dp题。多设一个支点和力矩和然后套板子就做完了。参考代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++.h>usingnamespacestd;#definemapunordered_m......
  • Codeforces Round 925 (Div. 3) 赛后总结
    此次总结借鉴了Register_int,0x3ea,幻想家协会会长的题解。感谢大佬。RecoveringaSmallString题目大意:将字母a-z编号为1-26,给出一个整数,此整数为三个字母之和,求改字符串的最小字典序。分析可以暴力循环,或者分情况讨论.我们只要尽力保持越前面的字母越小越好。#include<i......
  • 【题单】一个动态更新的洛谷综合题单
    洛谷试炼场的题目确实很具有代表性,但是近几年以来,又有许多经典题目出现在OI界中,这个大题单就是作为洛谷试炼场的扩展和补充。目录新版本食用指南更新日志题单Part0试机题Part1入门阶段Part2基础算法Part3搜索Part4动态规划Part4.1-4.4动态规划Part4.5-4.12动态规......