国庆开始只切了几道水题,想了想还是记录一下吧

本文介绍两道算法题目,一是关于海岛探索的最大岛屿面积计算,二是关于信号干扰的最大平均强度计算。通过DFS遍历算法寻找最大岛屿面积,并采用滑动窗口技术求解最大信号平均强度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最大岛屿

时间限制: 1000 ms  |  内存限制: 65535 KB
描述

神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等。加勒比海盗,你知道吧?杰克船长驾驶着自己的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王。  这是一个由海洋、岛屿和海盗组成的危险世界。面对危险重重的海洋与诡谲的对手,如何凭借智慧与运气,建立起一个强大的海盗帝国。

杰克船长手头有一张整个海域的海图,上面密密麻麻分布着各个海屿的位置及面积。他想尽快知道整个海域共有多少岛屿以及最大岛屿的面积。

输入
第1行:M N T,表示海域的长,宽及一个单位表示的面积大小
接下来有M行 ,每行有N个01组成的序列以及其中穿插一些空格。0表示海水,1表示陆地,其中的空格没用,可以忽略掉。

输出
输出一行,有2个整数,一个空格间隔,表示整个海域的岛屿数,以及最大岛屿的面积
样例输入
8 16 99
00000000 00000000
0000110011000000
0001111000111000
0000000  00 0000000
00111  111000001  10
001110000  0000000
0100001111 111100
0000000000000000
样例输出
5 990
提示
①若一个陆地八个方向之一(上、下、左、右、左上、右上、左下、右下)的位置也是陆地,则视为同一个岛屿。
② 假设第一行,最后一行,第一列,最后一列全为0.
③ 1<M, N≤500 1<T≤100000


注意空格的处理

ac代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define MAXN 550
#define MAX(a,b) a>b?a:b
using namespace std;
int n,m,sum;
int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
int map[MAXN][MAXN];
int v[MAXN][MAXN];
int check(int xx,int yy)
{
	if(map[xx][yy]==0||xx<0||xx>=n||yy<0||yy>=m)
	return 0;
	if(v[xx][yy])
	return 0;
	return 1;
}
void dfs(int x,int y)
{
	if(check(x,y))
	{
		sum++;
		v[x][y]=1;
		for(int i=0;i<8;i++)
		{
			dfs(x+dir[i][0],y+dir[i][1]);
		}
	}
}
int main()
{
	int i,j,k;
	char s[MAXN];
	while(scanf("%d%d%d",&n,&m,&k)!=EOF)
	{
		getchar();
		for(i=0;i<n;i++)
		{
			gets(s);
			int cnt=0;
			int len=strlen(s);
			for(j=0;j<len;j++)
			{
				if(s[j]!=' ')
				map[i][cnt++]=s[j]-'0';
			}
		}
		memset(v,0,sizeof(v));
		int num=0;
		int M=-1;
		for(i=0;i<n;i++)
		{
			for(j=0;j<m;j++)
			{
				if(map[i][j]==1&&!v[i][j])
				{
					num++;
					sum=0;
					dfs(i,j);
					M=MAX(M,sum);
				}
			}
		}
		printf("%d %d\n",num,M*k);
	}
    return 0;
}


引水工程

时间限制: 2000 ms  |  内存限制: 65535 KB
描述

南水北调工程是优化水资源配置、促进区域协调发展的基础性工程,是新中国成立以来投资额最大、涉及面最广的战略性工程,事关中华民族长远发展。“南水北调工程”,旨在缓解中国华北西北地区水资源短缺的国家战略性工程。就是把中国长江流域丰盈的水资源抽调一部分送到华北和西北地区。我国南涝北旱,南水北调工程通过跨流域的水资源合理配置,促进南北方经济、社会与人口、资源、环境的协调发展。

整个工程分东线、中线、西线三条调水线。东线工程位于东部,因地势低需抽水北送至华北地区。中线工程从汉水与其最大支流丹江交汇处的丹江口水库引水,自流供水给黄淮海平原大部分地区,20多座大中城市;西线工程在青藏高原上,由长江上游向黄河上游补水。

现在有N个区域需要建设水资源工程,它们可以自建水库解决缺水问题,也可以从已有水源的地区建立管道引水过来。当然,这些建设都需要大量投资。

你能不能给出一个优化水资源配置方案,在保证每个区域都能用上水的前提下,使得整个引水工程费用最低。

输入
第一行: K 表示有多少组测试数据。
接下来对每组测试数据:
第1行: N 表示有N个区域( 1<=N<=300 )
第2 行: W1 W2 …. WN Wi表示第i个区域自建水库需要的费用
再有N行: Pi1 Pi2 …. Pin Pij表示建立第i个区域与第j个区域引水管道的费用
输出
对于每组测试数据,输出占一行,即建立整个引水工程的最小费用。
样例输入
1
5
5 4 4 3 6
0 2 2 2 2
2 0 3 3 3
2 3 0 4 5
2 3 4 0 1
2 3 5 1 0
样例输出
10

建一个虚拟结点,表示自建水库的费用,然后就是prim就行了


ac代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#define MAXN 330
#define INF 0xfffffff
#define MIN(a,b) a>b?b:a
using namespace std;
int pri[MAXN][MAXN];
int dis[MAXN];
int self[MAXN];
int v[MAXN];
int n,sum;
void prime()
{
	int i,j,k,M;
	memset(v,0,sizeof(v));
	for(i=0;i<=n;i++)
	dis[i]=pri[0][i];
	for(i=0;i<=n;i++)
	{
		M=INF;
		for(j=0;j<=n;j++)
		{
			if(dis[j]<M&&!v[j])
			{
				k=j;
				M=dis[j];
			}
		}
		if(M==INF)
		return;
		v[k]=1;
		sum+=M;
		for(j=0;j<=n;j++)
		{
			if(pri[k][j]<dis[j]&&!v[j])
			dis[j]=pri[k][j];
		}
	}
}
int main()
{
	int t,i,j,num;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		for(i=1;i<=n;i++)
		{
			scanf("%d",&pri[0][i]);
			pri[i][0]=pri[0][i];
	    }
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=n;j++)
			{
				scanf("%d",&num);
				pri[i][j]=num;
			}
		}
		sum=0; 
		prime();
		printf("%d\n",sum);
	}
	return 0;
}


Interference Signal

时间限制: 2000 ms  |  内存限制: 65535 KB
描述

Dr.Kong’s laboratory monitorsome interference signals. The interference signals can be digitized into aseries of positive integer. May be, there are N integers a1,a2,…,an.

 

Dr.Kong wants toknow the averagestrength of a contiguous interference signal block. the block mustcontain at least M integers.

 

Pleasehelp Dr.Kong tocalculate the maximumaverage strength, giventhe constraint.

输入
The input contains K test cases. Each test case specifies:
* Line 1: Two space-separated integers, N and M.
* Lines2~line N+1: ai (i=1,2,…,N)
1 ≤ K≤ 8, 5 ≤ N≤ 2000, 1 ≤ M ≤ N, 0 ≤ ai ≤9999
输出
For each test case generate a single line containing a single integer that is 1000 times the maximal average value. Do not perform rounding.
样例输入
2 10 6
6 
4
2
10
3
8
5
9
4
1
5 2
10
3
8
5 
9 
样例输出
6500
7333

题意:一个数组,求连续的长度至少为m的一段数组的最大平均值


直接暴力

ac代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#define MAXN 2010
#define INF 0xfffffff
#define MAX(a,b) a>b?a:b
using namespace std;
int num[MAXN];
int main()
{
	int t,i,j,n,m,k;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		for(i=1;i<=n;i++)
		scanf("%d",&num[i]);
		int M,max=-1;
		int sum;
		for(k=m;k<=n;k++)
		{
			M=-1;
			for(i=1;i<=n-k+1;i++)
			{
				sum=0;
				for(j=i;j<=i+k-1;j++)
				{
					sum+=num[j];
				}
				M=MAX(sum,M);
			}
			M=M*1000/k;
			max=MAX(max,M);
	    }
		printf("%d\n",max);
	}
	return 0;
}

啊啊啊啊,写着写着不想写了,太水了,不写了!!!!闭嘴


基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值