【LGR-200-Div.4】洛谷入门赛 #27 A - H题解,包含(C++, Go语言)

news2024/12/29 9:11:48

前言:

        本文为【LGR-200-Div.4】洛谷入门赛 #27 A - H题解

        我只是一个只会各种暴力法的蒟蒻,这场比赛没有参加,是比赛完去写的,但是那个题目昨天晚上才能提交,导致拖久了一点

        最后面贴一个Go语言的,反正也没人看

        觉得有帮助或者写的不错可以点个赞

目录

题A:

题目大意和解题思路:

代码(C++):

题B:

题目大意和解题思路:

代码(C++):

题C:

题目大意和解题思路:

代码(C++):

题D:

题目大意和解题思路:

代码(C++):

题E:

题目大意和解题思路:

代码(C++):

题F:

题目大意和解题思路:

代码(C++):

题G1, G2:

题目大意和解题思路:

代码(C++):

题H:

题目大意和解题思路:​编辑

代码(C++):

A - H Go语言题解:


题A:

B4026 [语言月赛 202409] 灵感 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意和解题思路:

如果迅风在下午写下的文章的字数之和严格大于他在上午写下的文章的字数之和

简单的判断,注意仔细读题即可

代码(C++):

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    int a, b, c, d;
    std::cin >> a >> b >> c >> d;
    if (c + d > a + b) {
        std::cout << "Yes\n";
    } else {
        std::cout << "No\n";
    }
}

题B:

B4027 [语言月赛 202409] 重聚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意和解题思路:

  • 小紫在分离时间 ≥t1​ 分钟时开启感应,如果她和小蓝距离不超过 d1​,那么可以感应到小蓝的位置。
  • 小蓝在分离时间 ≥t2​ 分钟时开启感应,如果她和小紫距离不超过 d2​,那么可以感应到小紫的位置。

当双胞胎的一个人能感应到另一个人的位置,就可以行动使得两人重聚。

现在小紫和小蓝已经分离了 t 分钟,当前距离为 d。她们都在原地等候。

请判断至少还需要几分钟,才能让双胞胎中的一个人感应到另一个人的位置?

首先可以判断d1,d2是否都不满足

然后可以定义两个最大值time1, time2,当d1满足,time1就赋值成t1 - t
注意如果t1 - t < 0 的话,那就只需要0分钟

代码(C++):

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    int t, d, t1, d1, t2, d2;
    std::cin >> t >> d >> t1 >> d1 >> t2 >> d2;
    int res = 0;
    if (d > d1 && d > d2) {
        res = -1;
    } else {
        int time1 = 101, time2 = 101;
        if (d <= d1) {
            time1 = t1 - t;
            if (time1 < 0) {
                time1 = 0;
            }
        }
        if (d <= d2) {
            time2 = t2 - t;
            if (time2 < 0) {
                time2 = 0;
            }
        }
        res = std::min(time1, time2);
    }
    std::cout << res << "\n";
}

题C:

B4028 [语言月赛 202409] 转盘 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意和解题思路:

阅读理解,从1开始遍历到n,表示1到n等奖,算出每一个奖的中奖概率i / sum跟m比较即可

注意题目n的范围,要算出总和sum的话,sum需要是long long类型

代码(C++):

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    long long n, sum = 0;
    double m;
    std::cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        sum += i;
    }
    int res = -1;
    for (int i = 1; i <= n; i++) {
        double v = double(i) / double(sum) * 100;
        if (v >= m) {
            res = i;
            break;
        }
    }
    std::cout << res << "\n";
}

题D:

B4029 [语言月赛 202409] 种子 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意和解题思路:

x天开始每天额外增加y
使用一个while循环,当成长值大于k的时候退出循环即可

代码(C++):

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    int x, y, w, k;
    std::cin >> x >> y >> w >> k;
    int day = 0, len = 0;
    while (true) {
        day++;
        if (day < x) {
            len += day / w;
        } else {
            len += day / w + y;
        }
        if (len >= k) {
            break;
        }
    }
    std::cout << day << "\n";
}

题E:

B4030 [语言月赛 202409] 距离 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意和解题思路:

由于是从下标1开始的,所以可以使用一个长度为n + 1的二维数组来记录每一个情况
然后循环,每次变换之后,都找出当前二维数组的最大值即可

代码(C++):

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    int n, m;
    std::cin >> n >> m;
    std::vector<std::vector<int>> A(n + 1, std::vector<int> (n + 1, 0));
    while (m--) {
        int op, a, b, c;
        std::cin >> op >> a >> b >> c;

        if (op == 1) {
            A[a][b] += c;
        } else {
            A[a][b] -= c;
        }

        int res = A[0][0];
        for (auto row : A) {
            for (int x : row) {
                res = std::max(x, res);
            }
        }
        std::cout << res << "\n";
    }
}

题F:

B4031 [语言月赛 202409] 始终 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意和解题思路:

遍历两次,当前的字符相等计数器加1即可

代码(C++):

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    std::string s;
    std::cin >> s;
    int cnt = 0, n = s.size();
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            if (s[i] == s[j]) {
                cnt++;
            }
        }
    }
    std::cout << cnt << "\n";
}

题G1, G2:

B4032 [语言月赛 202409] 数字 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意和解题思路:

简单的贪心加数学

这题当然可以暴力模拟写,创建一个长度为n的数组,要保证x尽可能小,数组第一位为1,然后最后一位不断+1
在模拟的过程中我们可以发现:

要使得除以p的余数尽可能小,那么可以尽可能让余数为0,也就是各个位数之和刚好等于p,但是根据给出的p和n的范围,存在即使全是9,余数也不会是0

此时,n * 9 < p
那么可以让此时的余数为1,也就是10^(n -1)次方

由上面的模拟可以得出:

当n * 9 < p的时候,答案就为10 ^ (n - 1)次方

否则,开始暴力模拟,我这里用数学方法优化,首先让p - 1(也就是第一位)
如果p大于等于9,就从最后一位(各位)开始补充9,并且p -= 9
然后从十位数...依次进行操作
当p 不足9的时候,剩余的p加到当前位置即可

 

代码(C++):

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    int n, p;
    std::cin >> n >> p;
    if (n * 9 < p) {
        //数据量大的话,这里可以用字符串
        std::cout <<  static_cast<long long>(std::pow(10, n - 1)) << "\n";
    } else {
        std::vector<int> A(n);
        A[0] = 1;
        int idx = n - 1;
        p--;
        while (p) {
            if (p >= 9) {
                A[idx] = 9;
                p -= 9;
                idx--;
            } else {
                A[idx] += p;
                p = 0;
            }
        }
        std::string res = "";
        for (auto x : A) {
            res += std::to_string(x);
        }
        std::cout << res << "\n";
    }
}

题H:

B4033 [语言月赛 202409] 考试 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意和解题思路:

我觉得这一题没有上一题难度高

先求出一个差值数组,然后对数组进行排序,然后遍历数组

如果当前为0,那么答案加1,x++, y不变
如果当前不为0,那么答案加上当前的的值加1,然后x++, y--

注意,当x 与 y的差值为1的时候,只需让当前平局即可,答案只需要加上当前的值,然后就是 y --
 

代码(C++):

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    
    int n;
    std::cin >> n;
    std::vector<int> A(n);
    std::vector<int> B(n);
    for (int i = 0; i < n; i++) {
        std::cin >> A[i];
    }
    for (int i = 0; i < n; i++) {
        std::cin >> B[i];
    }
    std::vector<int> imp;
    int x = 0, y = 0;
    for (int i = 0; i < n; i++) {
        int v = A[i] - B[i];
        if (v > 0) {
            x++;
        } else if (v < 0) {
            y++;
            imp.push_back(-v);
        } else {
            imp.push_back(0);
        }
    }
    if (x > y) {
        std::cout << "0\n";
        return 0;
    }
    int res = 0, idx = 0;
    std::sort(imp.begin(), imp.end());
    while (x <= y) {
        if (imp[idx] == 0) {
            res++; x++; idx++;
        } else {
            if (x == y) {
                res += imp[idx]; idx++; y--;
            } else {
                res += imp[idx] + 1; idx++; y--; x++;
            }
        }
    }
    std::cout << res << "\n";
}

A - H Go语言题解:

package main

import (
	"bufio"
	. "fmt"
	"math"
	"os"
	"sort"
	"strconv"
)

var (
	in  *bufio.Reader
	out *bufio.Writer
)

func main() {
	in = bufio.NewReader(os.Stdin)
	out = bufio.NewWriter(os.Stdout)
	defer out.Flush()
	solve_G1_G2()
}

func solve_A() {
	var a, b, c, d int
	Fscan(in, &a, &b, &c, &d)
	var res string
	if a+b < c+d {
		res = "Yes"
	} else {
		res = "No"
	}
	Fprintln(out, res)
}

func solve_B() {
	var t, d, t1, d1, t2, d2 int
	Fscan(in, &t, &d, &t1, &d1, &t2, &d2)
	res := 0
	if d > d1 && d > d2 {
		res = -1
	} else {
		time1, time2 := 101, 101
		if d1 >= d {
			time1 = t1 - t
			if time1 < 0 {
				time1 = 0
			}
		}
		if d2 >= d {
			time2 = t2 - t
			if time2 < 0 {
				time2 = 0
			}
		}
		res = min(time1, time2)
	}
	Fprintln(out, res)
}

func solve_C() {
	n, m := 0, float64(0)
	Fscan(in, &n, &m)
	m /= 100
	sum := 0
	for i := 1; i <= n; i++ {
		sum += i
	}
	res := -1
	for i := 1; i <= n; i++ {
		p := float64(i) / float64(sum)
		if p >= m {
			res = i
			break
		}
	}
	Fprintln(out, res)
}

func solve_D() {
	var x, y, w, k int
	Fscan(in, &x, &y, &w, &k)
	l, day := 0, 0
	for true {
		day++
		if day < x {
			l += day / w
		} else {
			l += (day / w) + y
		}
		if l >= k {
			break
		}
	}
	Fprintln(out, day)
}

func solve_E() {
	n, m := 0, 0
	Fscan(in, &n, &m)
	A := make([][]int, n+1)
	for i := range A {
		A[i] = make([]int, n+1)
	}
	for ; m > 0; m-- {
		var op, a, b, c int
		Fscan(in, &op, &a, &b, &c)
		if op == 1 {
			A[a][b] += c
		} else {
			A[a][b] -= c
		}
		res := 0
		for _, row := range A {
			for _, x := range row {
				res = max(res, x)
			}
		}
		Fprintln(out, res)
	}
}

func solve_F() {
	s := ""
	Fscan(in, &s)
	n := len(s)
	res := 0
	for i := 0; i < n; i++ {
		c := s[i]
		for j := i; j < n; j++ {
			if c == s[j] {
				res++
			}
		}
	}
	Fprintln(out, res)
}

func solve_G1_G2() {
	n, p := 0, 0
	Fscan(in, &n, &p)
	if n*9 < p {
		//数据量大的话,这里可以用字符串
		Fprintln(out, int64(math.Pow(10, float64(n)-1)))
		return
	} else {
		A := make([]int, n)
		A[0] = 1
		p--
		idx := n - 1
		for p > 0 {
			if p >= 9 {
				A[idx] = 9
				p -= 9
				idx--
			} else {
				A[idx] += p
				p = 0
			}
		}
		res := ""
		for _, x := range A {
			res += strconv.Itoa(x)
		}
		Fprintln(out, res)
	}
}

func solveH() {
	n := 0
	Fscan(in, &n)
	A := make([]int, n)
	B := make([]int, n)
	for i := range A {
		Fscan(in, &A[i])
	}
	for i := range B {
		Fscan(in, &B[i])
	}
	diff := make([]int, n)
	for i := 0; i < n; i++ {
		diff[i] = A[i] - B[i]
	}
	x, y := 0, 0
	imp := make([]int, 0)
	for _, val := range diff {
		if val > 0 {
			x++
		} else if val < 0 {
			y++
			imp = append(imp, -val)
		} else {
			imp = append(imp, 0)
		}
	}
	if x > y {
		Fprintln(out, 0)
		return
	}
	res, idx := 0, 0
	sort.Ints(imp)
	for true {
		if imp[idx] == 0 {
			res++
			x++
			idx++
		} else {
			if x == y {
				res += imp[idx]
				idx++
				y--
			} else {
				res += imp[idx] + 1
				idx++
				x++
				y--
			}
		}
		if x > y {
			break
		}
	}
	Fprintln(out, res)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端分段式渲染较长文章

实现思路&#xff1a; 1. 后端返回整篇文章。 2. JavaScript 分段处理&#xff1a;将文章按一定的字符或段落长度分割&#xff0c;然后逐步将这些段落追加到页面上。 3. 定时器或递归调用&#xff1a;使用 setInterval 或 setTimeout 来控制段落的逐步渲染。 代码实现示例 …

2024年企业必备10款源代码加密软件!保护公司源代码 !

随着科技的发展&#xff0c;企业的数据安全性变得愈发重要&#xff0c;特别是源代码——企业的核心资产之一。源代码一旦泄露&#xff0c;可能带来不可估量的损失&#xff0c;导致竞争优势丧失、知识产权泄露&#xff0c;甚至对企业的未来生存造成威胁。因此&#xff0c;确保源…

Centos中关闭swap分区,关闭内存交换

概述&#xff1a; Swap 分区是 Linux 系统中扩展物理内存的一种机制。Swap的主要功能是当全部的RAM被占用并需要更多内存时&#xff0c;用磁盘空间代理RAM内存。Swap对虚拟化技术资源损耗非常大&#xff0c;一般虚拟化是不允许开启交换空间的&#xff0c;如果不关闭Swap&…

城市脉络下的空间句法:整合度与选择度的深度解析

上回写过一篇&#xff0c;基于空间句法的路网整合度、选择度分析&#xff0c;当时碍于篇幅和侧重点&#xff0c;主要讲了如何安装sDNA这个插件来实现路网的整合度、选择度分析&#xff0c;并且分析部分也只是画了几条简单的线段&#xff0c;这次我们深化一下原理和指标的解析&a…

手势识别-Yolov5模型-自制数据集训练

1、源码下载&#xff1a; 大家可以直接在浏览器搜索yolov5即可找到官方链接&#xff0c;跳转进github进行下载&#xff1a; 这里对yolov5模型补充说明一下&#xff0c;它是存在较多版本的&#xff0c;具体信息可在master->tags中查看&#xff0c;大家根据需要下载。这些不同…

2024.9.18 作业

将配置桥接网络的过程整理成文档&#xff0c;发csdn 放资源里了 思维导图&#xff1a;

0基础带你入门Linux之简介

1.Linux和Windows对比 Window很明显的特征就是有C盘、D盘登各种磁盘 我们通过点击不同的盘符&#xff0c;点击里面存储的文件进行查阅的操作 而Linux则很简单&#xff0c;只有一个根目录&#xff0c;也可以说只有一个盘&#xff0c;整个系统所有的东西都是在根目录下的 我们可…

C/C++中哪些数据存放于栈区、堆区、静态区、常量区的详细说明

文章目录 1. 栈区&#xff08;Stack&#xff09;2. 堆区&#xff08;Heap&#xff09;3. 静态区&#xff08;Static&#xff09;4. 常量区&#xff08;Read-Only or Constant Section&#xff09;总结&#xff1a;栈&#xff08;Stack&#xff09;的生长&#xff1a;堆&#xf…

js中apply,call,bind的区别与用法

在JavaScript中&#xff0c;所有的函数再被调用的时候都会默认传入两个参数&#xff0c;一个是this&#xff0c;还有一个是arguments。在默认情况下this都是指当前的调用函数的对象。但是有时候我们需要改变this的指向&#xff0c;也就是说使函数可以被其他对象来调用&#xff…

【数据可视化】Arcgis api 4.x 专题图制作之分级色彩,采用自然间断法(使用simple-statistics JS数学统计库生成自然间断点)

1.效果 2.实现 2.1 分级色彩 分级色彩是在GIS制图中&#xff0c;通过不同颜色等级来表示数据量级差异的符号化方法&#xff0c;帮助用户直观识别和比较数据的大小。 2.2 分级方法 在GIS中进行分级色彩制图时&#xff0c;可以选择不同的分级方法来表示数据的分布和变化&#xf…

好用又便宜的电商分账系统

多部门联合治税的背景下&#xff0c;合规运营是企业的首要任务。确保税务合规不仅能避免法律风险&#xff0c;还能提升企业的信誉和运营效率&#xff0c;电商分账系统是电商行业必备的合规工具。今天&#xff0c;商淘云为您分享选择性价比高的电商分账系统的三大规则&#xff0…

鸿蒙Harmony应用开发,数据驾驶舱登录页面的实现

鸿蒙Harmony应用开发&#xff0c;数据驾驶舱登录页面的实现 ​ 首先我们有个Splash 过渡页面来判断当前是用户是否登录&#xff0c;我们先从preferences中获取token是否存在。如果不存在直接跳转登录即可&#xff0c;如果存在的情况我们再去获取下用户的信息看看token是否过期…

探索音乐的新边界——AI写歌的奇妙呈现

在音乐的世界里&#xff0c; 创新总是令人充满期待。 对于没有创作灵感、毫无创作水平的小孩&#xff0c;走进一个充满惊喜的音乐平台 —— &#xff08;Suno&#xff09; 看看AI 写歌的神奇魅力。S为我们提供了一个丰富多彩的音乐世界&#xff0c; 从新歌推荐到各种风格的音…

Vmware虚拟机无法打开内核设备“\\.\Global\vmx86“的解决方法

我的问题是在一次系统更新后&#xff0c;导致虚拟机无法使用的。我的虚拟机只有方法三解决了问题。 一、方法一 以管理员身份打开cmd&#xff0c;依次执行以下命令&#xff1a; net start vmci net start vmx86 net start VMnetuserif二、方法二 按 WinR 键&#xff0c;运行…

用好这几个AI抠图工具,既省心又省力!

在设计、摄影和数字创作的世界里&#xff0c;抠图虽然常见&#xff0c;却往往让人感到繁琐。不过&#xff0c;随着人工智能的飞速发展&#xff0c;许多可爱的AI抠图工具应运而生&#xff0c;轻松高效地解决了这一难题&#xff01;下面就来看看几款超级实用的AI抠图工具&#xf…

Python “字符串操作” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中列表的一些题目&#xff0c;方便学习完Python的元组之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的列表&#xff0c;推荐…

Qt 学习第九天:标准对话框 页面布局

系统标准对话框 错误对话框 //错误对话框connect(createPro, &QAction::triggered, this, []{//参数1 父亲 参数2 标题 参数3 对话框内显示文本内容 。。。QMessageBox::critical(this, "报错!", "没加头文件!");}); 【运行结果】 信息对话框 co…

使用arduino玩基于esp8266的nodemcu开发板

一、简介 中秋节到图书馆看书&#xff0c;看到了arduino方面的书籍&#xff0c;里面有提到ESP8266模块。让我想起我抽屉里吃灰很久了的基于esp8266的nodemcu开发板。于是把书借回家研究了一下。这里做个记录。 二、我目前在使用的云服务器推荐 学Linux不搞个云服务器始终感觉…

【笔记】进制转换

文章目录 一、任意进制转十进制1、整数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 2、小数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 3、代码1、整数转化成十进制2、小…

使用 Vue 3 和 TypeScript 实现带打字效果的仿 AI 分析展示组件

在这篇博客中&#xff0c;我将分享如何用 Vue 3 和 TypeScript 实现一个带打字效果的 AI 分析展示组件。该组件具有如下功能&#xff1a; 动态打字效果&#xff1a;模拟打字机逐步显示内容。自动滚动&#xff1a;内容超出容器高度时自动滚动到最新位置。 1. 组件实现需求 我…