目录
- [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 压缩技术
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
1.1 示例
1.2 思路
设计被轰炸次数count
和被轰炸轮数round
- 每次轰炸遍历,如果点的坐标在方形范围内,则
count++
,遍历的下标i
赋给round
- 如果不在范围内,则
i++
即可 - 判断范围,只要判断点的
x
是否在轰炸的x1和x2
之间,y
是否在y1
和y2
之间即可 - 使用2层循环,外层循环以要判断的点的个数为边界,内层以轰炸总轮数为边界,分别判断每个点是否在每轮轰炸的范围内,如果在则计数
- 由于题目要求一次性输入几个数据,最后一起输出,所有我将
count
和round
设为数组,以每个点来循环输出,如果count
大于0,说明被炸了,则输出Y
和count、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;
}