2025B难题练习

news2025/5/18 15:25:42

1.启动多任务排序

拓扑排序
每次选入度为0的点
对每次选的点进行排序

package main

import (
	"bufio"
	"fmt"
	"os"
	"slices"
	"strings"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	text := scanner.Text()
	relations := strings.Split(text, " ")

	inNum := make(map[string]int)
	NodeEdge := make(map[string][]string)
	for i := 0; i < len(relations); i++ {
		parts:=strings.Split(relations[i],"->")
		r := string(parts[0])
		l := string(parts[1])
		inNum[r]++
		if _, ok := inNum[l]; !ok {
			inNum[l] = 0
		}
		NodeEdge[l] = append(NodeEdge[l], r)
	}
	//fmt.Println(inNum)

	queue := []string{}
	for k, v := range inNum {
		//fmt.Println("=====", string(k+'A'))
		if v == 0 {
			queue = append(queue, k)
			//fmt.Println(string(r+'A'), "---r")
		}
	}

	ans := []string{}
	for len(queue) > 0 {
		slices.Sort(queue)
		tmp := []string{}

		for i := 0; i < len(queue); i++ {
			ans = append(ans, queue[i])
			for _, r := range NodeEdge[queue[i]] {
				inNum[r]--
				if inNum[r] == 0 {
					//fmt.Println("+++", r)
					tmp = append(tmp, r)
				}
			}
		}
		queue = tmp
	}
	fmt.Println(strings.Join(ans, " "))

}

2.欢乐周末

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var n, m int

type pair struct{ x, y int }

var visit1 [][]bool
var visit2 [][]bool
var grid [][]int
var start []pair
var dst []pair

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	input := scanner.Text()
	relations := strings.Split(input, " ")
	n, _ = strconv.Atoi(relations[0])
	m, _ = strconv.Atoi(relations[1])

	grid = make([][]int, n)
	visit1 = make([][]bool, n)
	visit2 = make([][]bool, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		input = scanner.Text()
		line := strings.Split(input, " ")
		grid[i] = make([]int, m)
		visit1[i] = make([]bool, m)
		visit2[i] = make([]bool, m)
		for j := 0; j < m; j++ {
			grid[i][j], _ = strconv.Atoi(line[j])
			if grid[i][j] == 2 {
				start = append(start, pair{i, j})
			}
			if grid[i][j] == 3 {
				dst = append(dst, pair{i, j})
			}
		}
	}

	bfs(start[0].x, start[0].y, visit1)
	bfs(start[1].x, start[1].y, visit2)

	ans := 0
	for _, v := range dst {
		//fmt.Println(v)
		if visit1[v.x][v.y] && visit2[v.x][v.y] {
			ans++
		}
	}
	fmt.Println(ans)
}
func bfs(i, j int, visit [][]bool) {
	queue := []pair{}
	queue = append(queue, pair{i, j})
	//入队时就标记为true
	visit[i][j] = true

	for len(queue) > 0 {
		tmp := []pair{}
		for i := 0; i < len(queue); i++ {
			now := queue[i]
			dx := []int{1, 0, -1, 0}
			dy := []int{0, 1, 0, -1}
			for k := 0; k < 4; k++ {
				nx := dx[k] + now.x
				ny := dy[k] + now.y
				if nx >= 0 && ny >= 0 && nx < n && ny < m && grid[nx][ny] != 1 && !visit[nx][ny] {
					tmp = append(tmp, pair{nx, ny})
					visit[nx][ny] = true
				}
			}
		}
		queue = tmp
	}
}

3.返回矩阵中非1的元素个数

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

type pair struct{ x, y int }

var n, m int

// var visit [][]bool
var grid [][]int

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	text := scanner.Text()
	line := strings.Split(text, " ")
	n, _ = strconv.Atoi(line[0])
	m, _ = strconv.Atoi(line[1])

	grid = make([][]int, n)
	//visit = make([][]bool, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		text = scanner.Text()
		line = strings.Split(text, " ")
		grid[i] = make([]int, m)
		//visit[i] = make([]bool, m)
		for j := 0; j < m; j++ {
			grid[i][j], _ = strconv.Atoi(line[j])
		}
	}
	bfs(0, 0)
	ans := 0
	for i := 0; i < n; i++ {
		//fmt.Println(grid[i])
		for j := 0; j < m; j++ {
			if grid[i][j] != 1 {
				ans++
			}
		}
	}
	fmt.Println(ans)

}
func bfs(i int, j int) {
	grid[i][j] = 1
	queue := []pair{}
	queue = append(queue, pair{i, j})

	for len(queue) > 0 {
		dx := []int{1, 0, -1, 0}
		dy := []int{0, 1, 0, -1}
		tmp := []pair{}
		for i := 0; i < len(queue); i++ {
			now := queue[i]
			//fmt.Println("now", now.x, now.y)
			for k := 0; k < 4; k++ {
				nx := dx[k] + now.x
				ny := dy[k] + now.y
				//fmt.Println("nx,ny", nx, ny)
				if nx >= 0 && ny >= 0 && nx < n && ny < m && grid[nx][ny] == 0 {
					grid[nx][ny] = 1
					//fmt.Println("add:", nx, ny)
					tmp = append(tmp, pair{nx, ny})
					//fmt.Println(tmp)
				}
			}
		}
		queue = tmp
		//fmt.Println("queue", queue, len(queue))
	}
}

4. 爱吃蟠桃的孙悟空

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var nums []int

func main() {

	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	text := scanner.Text()
	line := strings.Split(text, " ")

	for i := 0; i < len(line); i++ {
		num, _ := strconv.Atoi(line[i])
		nums = append(nums, num)
	}
	//fmt.Println("nums", nums)

	scanner.Scan()
	text = scanner.Text()
	time, _ := strconv.Atoi(text)

	l, r := 1, 100010
	for l < r {
		mid := (l + r) >> 1
		if check(mid) <= time {
			r = mid
		} else {
			l = mid + 1
		}
		//fmt.Println("l,r", l, r)
	}
	if check(l) <= time {
		fmt.Println(l)
	} else {
		fmt.Println(0)
	}
	//fmt.Println("+++", check(1))
}
func check(k int) int {
	ans := 0
	//注意这里
	tmp := make([]int, len(nums))
	copy(tmp, nums)
	for i := 0; i < len(tmp); i++ {
		for tmp[i] > 0 {
			//fmt.Println("tmp:", tmp[i])
			ans++
			//fmt.Println("ans", ans)
			tmp[i] -= k
		}
	}
	return ans
}

5.矩阵匹配

匈牙利算法

package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
	"strconv"
	"strings"
)

var (
	n, m, k int
	nums    [][]int
	match   []int
	visit   []bool
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	text := scanner.Text()
	line := strings.Split(text, " ")
	n, _ = strconv.Atoi(line[0])
	m, _ = strconv.Atoi(line[1])
	k, _ = strconv.Atoi(line[2])

	nums = make([][]int, n)
	minNum := math.MaxInt 
	maxNum := math.MinInt 
	for i := 0; i < n; i++ {
		scanner.Scan()
		text = scanner.Text()
		line = strings.Split(text, " ")
		nums[i] = make([]int, m)
		for j := 0; j < m; j++ {
			nums[i][j], _ = strconv.Atoi(line[j])
			minNum = min(minNum, nums[i][j])
			maxNum = max(maxNum, nums[i][j])
		}
	}

	l, r := minNum, maxNum
	for l <= r {
		mid := (l + r) >> 1
		if valid(mid) >= n-k+1 {
			r=mid-1
		} else {
			l = mid+1
		}
	}
	fmt.Println(r+1)

}
func valid(maxValue int) int {
	match = make([]int, m)
	for i := 0; i < m; i++ {
		match[i] = -1
	}
	cnt := 0
	for i := 0; i < n; i++ {
		visit = make([]bool, m)
		if dfs(i, maxValue) {
			cnt++
		}
	}
	return cnt
}
func dfs(i int, maxValue int) bool {
	for j := 0; j < m; j++ {
		if !visit[j] && nums[i][j] <= maxValue {
			visit[j] = true
			if match[j] == -1 || dfs(match[j], maxValue) {
				match[j] = i
				return true
			}
		}
	}
	return false
}

6.荒岛求生

注意特殊情况,数字个数=0或>30000或者数字=0
从左往右遍历
积累Right的力量,算往左的人走能活几个
从右往左遍历
积累Left的力量,算往右的人走能活几个

ans=左边活的人+右边活的人

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	var nums []int
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	text := scanner.Text()
	line := strings.Split(text, " ")
	n := len(line)
	if n > 30000 || n == 0 {
		fmt.Println(-1)
		return
	}
	for i := 0; i < n; i++ {
		x, _ := strconv.Atoi(line[i])
		if x==0 {
			fmt.Println(-1)
			return
		}
		nums = append(nums, x)
	}

	sumRight := 0
	cnt := 0
	for i := 0; i < n; i++ {
		if nums[i] > 0 {
			sumRight += nums[i]
		} else {
			numValue := -nums[i]
			if numValue > sumRight {
				cnt++
				sumRight = 0
			} else {
				sumRight -= numValue
			}
		}
	}

	sumLeft := 0
	for i := n - 1; i >= 0; i-- {
		if nums[i] < 0 {
			sumLeft += -nums[i]
		} else {
			if nums[i] > sumLeft {
				sumLeft = 0
				cnt++
			} else {
				sumLeft -= nums[i]
			}
		}
	}
	
	fmt.Println(cnt)

}

7.无向图染色

package main

import "fmt"

type pair struct{ x, y int }

func main() {
	var n, m int
	fmt.Scan(&n, &m)
	if m == 0 {
		fmt.Println(1 << n)
		return
	}

	edge := []pair{}
	for i := 0; i < m; i++ {
		var x, y int
		fmt.Scan(&x, &y)
		edge = append(edge, pair{x, y})
	}

	ans := 0
	for i := 0; i < 1<<n; i++ {
		flag := true
		for j := 0; j < m; j++ {
			x, y := edge[j].x, edge[j].y
			if i>>(x-1)&1 == 1 && i>>(y-1)&1 == 1 {
				flag = false
				break
			}
		}
		if flag {
			ans++
		}
	}
	fmt.Println(ans)

}

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

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

相关文章

双向长短期记忆网络-BiLSTM

5月14日复盘 二、BiLSTM 1. 概述 双向长短期记忆网络&#xff08;Bi-directional Long Short-Term Memory&#xff0c;BiLSTM&#xff09;是一种扩展自长短期记忆网络&#xff08;LSTM&#xff09;的结构&#xff0c;旨在解决传统 LSTM 模型只能考虑到过去信息的问题。BiLST…

MySQL UPDATE 执行流程全解析

引言 当你在 MySQL 中执行一条 UPDATE 语句时&#xff0c;背后隐藏着一套精密的协作机制。从解析器到存储引擎&#xff0c;从锁管理到 WAL 日志&#xff0c;每个环节都直接影响数据一致性和性能。 本文将通过 Mermaid 流程图 和 时序图&#xff0c;完整还原 UPDATE 语句的执行…

亚马逊云科技:开启数字化转型的无限可能

在数字技术蓬勃发展的今天&#xff0c;云计算早已突破单纯技术工具的范畴&#xff0c;成为驱动企业创新、引领行业变革的核心力量。亚马逊云科技凭借前瞻性的战略布局与持续的技术深耕&#xff0c;在全球云计算领域树立起行业标杆&#xff0c;为企业和个人用户提供全方位、高品…

【实测有效】Edge浏览器打开部分pdf文件显示空白

问题现象 Edge浏览器打开部分pdf文件显示空白或显示异常。 ​​​​​​​ ​​​​​​​ ​​​​​​​ 问题原因 部分pdf文件与edge浏览器存在兼容性问题&#xff0c;打开显示异常。 解决办法 法1&#xff1a;修改edge配置 打开edge浏览器&#x…

RJ连接器的未来:它还会是网络连接的主流标准吗?

RJ连接器作为以太网接口的代表&#xff0c;自20世纪以来在计算机网络、通信设备、安防系统等领域中占据了核心地位。以RJ45为代表的RJ连接器&#xff0c;凭借其结构稳定、信号传输可靠、成本低廉等优势&#xff0c;在有线网络布线领域被广泛采用。然而&#xff0c;在无线网络不…

Redis持久化机制详解:保障数据安全的关键策略

在现代应用开发中&#xff0c;Redis作为高性能的内存数据库被广泛使用。然而&#xff0c;内存的易失性特性使得持久化成为Redis设计中的关键环节。本文将全面剖析Redis的持久化机制&#xff0c;包括RDB、AOF以及混合持久化模式&#xff0c;帮助开发者根据业务需求选择最适合的持…

DeepSeek 大模型部署全指南:常见问题、优化策略与实战解决方案

DeepSeek 作为当前最热门的开源大模型之一&#xff0c;其强大的语义理解和生成能力吸引了大量开发者和企业关注。然而在实际部署过程中&#xff0c;无论是本地运行还是云端服务&#xff0c;用户往往会遇到各种技术挑战。本文将全面剖析 DeepSeek 部署中的常见问题&#xff0c;提…

嵌入式培训之数据结构学习(五)栈与队列

一、栈 &#xff08;一&#xff09;栈的基本概念 1、栈的定义&#xff1a; 注&#xff1a;线性表中的栈在堆区&#xff08;因为是malloc来的&#xff09;&#xff1b;系统中的栈区存储局部变量、函数形参、函数返回值地址。 2、栈顶和栈底&#xff1a; 允许插入和删除的一端…

RabbitMQ--进阶篇

RabbitMQ 客户端整合Spring Boot 添加相关的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 编写配置文件&#xff0c;配置RabbitMQ的服务信息 spri…

Android Studio报错Cannot parse result path string:

前言 最近在写个小Demo&#xff0c;参考郭霖的《第一行代码》&#xff0c;学习DrawerLayout和NavigationView&#xff0c;不知咋地&#xff0c;突然报错Cannot parse result path string:xxxxxxxxxxxxx 反正百度&#xff0c;问ai都找不到答案&#xff0c;报错信息是完全看不懂…

关于网站提交搜索引擎

发布于Eucalyptus-blog 一、前言 将网站提交给搜索引擎是为了让搜索引擎更早地了解、索引和显示您的网站内容。以下是一些提交网站给搜索引擎的理由&#xff1a; 提高可见性&#xff1a;通过将您的网站提交给搜索引擎&#xff0c;可以提高您的网站在搜索结果中出现的机会。当用…

基于QT(C++)OOP 实现(界面)酒店预订与管理系统

酒店预订与管理系统 1 系统功能设计 酒店预订是旅游出行的重要环节&#xff0c;而酒店预订与管理系统中的管理与信息透明是酒店预订业务的关键问题所在&#xff0c;能够方便地查询酒店信息进行付款退款以及用户之间的交流对于酒店预订行业提高服务质量具有重要的意义。 针对…

机械元件杂散光难以把控?OAS 软件案例深度解析

机械元件的杂散光分析 简介 在光学系统设计与工程实践中&#xff0c;机械元件的杂散光问题对系统性能有着不容忽视的影响。杂散光会降低光学系统的信噪比、图像对比度&#xff0c;甚至导致系统功能失效。因此&#xff0c;准确分析机械元件杂散光并采取有效抑制措施&#xff0c…

游戏引擎学习第289天:将视觉表现与实体类型解耦

回顾并为今天的工作设定基调 我们正在继续昨天对代码所做的改动。我们已经完成了“脑代码&#xff08;brain code&#xff09;”的概念&#xff0c;它本质上是一种为实体构建的自组织控制器结构。现在我们要做的是把旧的控制逻辑迁移到这个新的结构中&#xff0c;并进一步测试…

【Linux网络】ARP协议

ARP协议 虽然我们在这里介绍 ARP 协议&#xff0c;但是需要强调&#xff0c;ARP 不是一个单纯的数据链路层的协议&#xff0c;而是一个介于数据链路层和网络层之间的协议。 ARP数据报的格式 字段长度&#xff08;字节&#xff09;说明硬件类型2网络类型&#xff08;如以太网为…

MUSE Pi Pro 开发板 Imagination GPU 利用 OpenCL 测试

视频讲解&#xff1a; MUSE Pi Pro 开发板 Imagination GPU 利用 OpenCL 测试 继续玩MUSE Pi Pro&#xff0c;今天看下比较关注的gpu这块&#xff0c;从opencl看起&#xff0c;安装clinfo指令 sudo apt install clinfo 可以看到这颗GPU是Imagination的 一般嵌入式中gpu都和hos…

多线程与线程互斥

我们初步学习完线程之后&#xff0c;就要来试着写一写多线程了。在写之前&#xff0c;我们需要继续来学习一个线程接口——叫做线程分离。 默认情况下&#xff0c;新创建的线程是joinable的&#xff0c;线程退出后&#xff0c;需要对其进行pthread_join操作&#xff0c;否则无法…

游戏引擎学习第287天:加入brain逻辑

Blackboard&#xff1a;动态控制类似蛇的多节实体 我们目前正在处理一个关于实体系统如何以组合方式进行管理的问题。具体来说&#xff0c;是在游戏中实现多个实体可以共同或独立行动的机制。例如&#xff0c;我们的主角拥有两个实体组成部分&#xff0c;一个是身体&#xff0…

continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手

​一、软件介绍 文末提供程序和源码下载 Continue 使开发人员能够通过我们的开源 VS Code 和 JetBrains 扩展以及模型、规则、提示、文档和其他构建块的中心创建、共享和使用自定义 AI 代码助手。 二、功能 Chat 聊天 Chat makes it easy to ask for help from an LLM without…

2025年EB SCI2区TOP,多策略改进黑翅鸢算法MBKA+空调系统RC参数辨识与负载聚合分析,深度解析+性能实测

目录 1.摘要2.黑翅鸢优化算法BKA原理3.改进策略4.结果展示5.参考文献6.代码获取7.读者交流 1.摘要 随着空调负载在电力系统中所占比例的不断上升&#xff0c;其作为需求响应资源的潜力日益凸显。然而&#xff0c;由于建筑环境和用户行为的变化&#xff0c;空调负载具有异质性和…