洛谷_P1320、P1830 压缩技术和轰炸Ⅲ

目录

  • [1 洛谷_P1320 压缩技术](#1 洛谷_P1320 压缩技术)
    • [1.1 示例](#1.1 示例)
    • [1.2 思路](#1.2 思路)
    • [1.3 实现](#1.3 实现)
  • [2 洛谷_P1830 轰炸III](#2 洛谷_P1830 轰炸III)
    • [1.1 示例](#1.1 示例)
    • [1.2 思路](#1.2 思路)
    • [1.3 实现](#1.3 实现)

1 洛谷_P1320 压缩技术

链接:洛谷_P1320 压缩技术

1.1 示例

1.2 思路

一个N*N的点阵,压缩码首位是N,后面是连续的数字

  • 如果连续3个0:000,则压缩码是3
  • 如果连续4个1:1111,则压缩码是4
  • 如果是这样001100111100,则压缩码是2 2 2 4 2

我们在输入时,使用字符串string即可,一行一行输入。先输入第一行,此时计数s1.length()即第一位压缩码

后面以此输入第二行s2、第三行s3...并将字符串直接拼接s1+s2+s3+....

注意

开头第二个压缩码必须是0的个数:如果第一行是 1110001,前面没有0,则压缩码是0 3 3 1

1.3 实现

c++ 复制代码
#include<iostream>
using namespace std;


int main()
{
	string s1;
	cin >> s1;
	int length = s1.length();

	for (int i = 0; i < length - 1; i++)
	{
		string s2;
		cin >> s2;
		s1 += s2;
	}

	cout << length;	//直接输出N

	int tmp;
	int count = 1;
	if (s1[0] == '1')
	{
		cout << " " << 0;
	}

	for (int i = 0; i < length * length; i++)
	{
		tmp = s1[i];

		if (s1[i] == s1[i + 1])	count++;
		else
		{
			cout << " " << count;	//前面的不是相同数字,直接输出之前的计数个数
			count = 1;
		}
	}
	return 0;
}

2 洛谷_P1830 轰炸III

链接:洛谷_P1830 轰炸III

1.1 示例

1.2 思路

设计被轰炸次数count和被轰炸轮数round

  • 每次轰炸遍历,如果点的坐标在方形范围内,则count++,遍历的下标i赋给round
  • 如果不在范围内,则i++即可
  • 判断范围,只要判断点的x是否在轰炸的x1和x2之间,y是否在y1y2之间即可
  • 使用2层循环,外层循环以要判断的点的个数为边界,内层以轰炸总轮数为边界,分别判断每个点是否在每轮轰炸的范围内,如果在则计数
  • 由于题目要求一次性输入几个数据,最后一起输出,所有我将countround设为数组,以每个点来循环输出,如果count大于0,说明被炸了,则输出Ycount、round

1.3 实现

c++ 复制代码
#include<iostream>
using namespace std;

struct BombingAera
{
	int x1;
	int y1;
	int x2;
	int y2;
};
int main()
{
	//输入总大小
	int bomb_aera_weight, bomb_aera_height, bomb_count, bomb_point;
	cin >> bomb_aera_weight >> bomb_aera_height >> bomb_count >> bomb_point;

	//输入轰炸矩形的坐标
	BombingAera bba[100];
	for (int i = 0; i < bomb_count; i++)
	{
		cin >> bba[i].x1 >> bba[i].y1 >> bba[i].x2 >> bba[i].y2;
	}

	int last_bomb[100] = { 0 };	// 上次轰炸
	int count[100] = { 0 };	//轰炸总次数

	for (int j = 0; j < bomb_point; j++)
	{
		//输入轰炸点的坐标
		int point_x=0, point_y=0;
		cin >> point_x >> point_y;
		for (int i = 0; i < bomb_count; i++)
		{
			if (point_x >= bba[i].x1 && point_x <= bba[i].x2 &&
				point_y >= bba[i].y1 && point_y <= bba[i].y2)
			{
				count[j]++;
				last_bomb[j] = i;
			}
		}
	}
	for (int i = 0; i < bomb_point; i++)
	{
		if (!count[i])	cout << "Y " << count[i] << " " << last_bomb[i] + 1 << endl;
		else cout << "N " << endl;
	}
	return 0;
}
相关推荐
好奇龙猫1 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20242 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
ChoSeitaku2 小时前
链表交集相关算法题|AB链表公共元素生成链表C|AB链表交集存放于A|连续子序列|相交链表求交点位置(C)
数据结构·考研·链表
偷心编程2 小时前
双向链表专题
数据结构
香菜大丸2 小时前
链表的归并排序
数据结构·算法·链表
jrrz08282 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time2 小时前
golang学习2
算法
@小博的博客2 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
南宫生3 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步4 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝