涂色

Description

有一根长度为1000000000的棍子,一开始涂成白色。
棍子上有刻度,左端点为0,右端点1000000000。
由于某种原因这根棍子的某些部分被重新涂过了。
重新涂的颜色可能是黑色或着白色。
棍子总共被依次重新涂了N(1<=N<=5000)次。
找出最后最长的白色段。

Input

第1行一个数N。
接下来N行表示一次涂色,格式如下:
ai bi ci
ai和bi为整数,ci是字母b或w。
表示把ai和bi之间那段涂成ci色(w白色,b黑色)。

0<=ai<=bi<=1000000000。

Output

一行,两个数x和y(x如果有多个最长的段,输出x最小的一个。

Sample Input

4
1 999999997 b
40 300 w
300 634 w
43 47 b

Sample Output

47 634
.
.
.
.
.
分析
离散化
对于一段区域,我们要以涂色时间从后往前地去判断它是否存在且为白色
注意要记录位置
.
.
.
.
.
.
程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
long long x1[5001],y1[5001],x[10001];
char c[6000];

int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		cin>>x1[i]>>y1[i]>>c[i];
		x[i*2-1]=x1[i];
		x[i*2]=y1[i];
	}
	sort(x+1,x+2*n+1);
	
	long long ans=0,fa1=0,wzx=1,ax=0,ay=0;
	for (int i=2;i<=2*n;i++)
	{
		int bz=0;
		for (int j=n;j>=1;j--)
			if (x[i]<=y1[j]&&x[i-1]>=x1[j]&&c[j]=='w')
			{
				bz=1;
				fa1+=x[i]-x[i-1];
				break;
			} else
			if (x[i]<=y1[j]&&x[i-1]>=x1[j]&&c[j]=='b') break;
		if (bz==1)
		{
			if (fa1>ans)
			{
				ans=fa1;
				ay=i;
				ax=wzx;
			}
		}
		if (bz==0)
		{
			wzx=i;
			fa1=0;
		}
	}
	cout<<x[ax]<<' '<<x[ay];
	
	return 0;
}

### 图像涂色算法与图形涂色技术 图像涂色算法和图形涂色技术在计算机图形学中占据重要地位,广泛应用于游戏开发、图像编辑软件以及计算机视觉领域。以下是对相关算法和技术的详细解释: #### Flood Fill(泛洪填充)算法 Flood Fill 是一种经典的图像处理算法,用于将连通区域内的所有像素点替换为指定颜色。其核心思想是从一个“种子”点出发,递归地向四周扩展,直到遇到边界或已经填充过的区域为止[^2]。 以下是 Flood Fill 的伪代码实现: ```python def flood_fill(x, y, old_color, new_color): if 画布[x][y] != old_color or 画布[x][y] == new_color: return 画布[x][y] = new_color flood_fill(x+1, y, old_color, new_color) flood_fill(x-1, y, old_color, new_color) flood_fill(x, y+1, old_color, new_color) flood_fill(x, y-1, old_color, new_color) ``` 该算法适用于四连通或八连通区域的填充,具体实现取决于是否考虑对角线方向的扩展[^3]。 #### 边界填充算法(Boundary Fill) 边界填充算法是另一种常见的涂色技术,主要用于填充具有明确边界的区域。与 Flood Fill 不同的是,边界填充算法会检查当前像素是否位于边界内,并根据边界颜色进行填充。 以下是边界填充算法的伪代码: ```python def boundary_fill(x, y, boundary_color, fill_color): if 画布[x][y] != boundary_color and 画布[x][y] != fill_color: 画布[x][y] = fill_color boundary_fill(x+1, y, boundary_color, fill_color) boundary_fill(x-1, y, boundary_color, fill_color) boundary_fill(x, y+1, boundary_color, fill_color) boundary_fill(x, y-1, boundary_color, fill_color) ``` #### HSI 模型的应用 HSI(色调、饱和度、亮度)模型是一种更接近人类感知颜色的方式,常用于图像处理中。相比于 RGB 模型,HSI 更适合描述色彩的变化和调整,能够减少图像处理的复杂性并提高效率[^1]。因此,在涂色算法中结合 HSI 模型可以更好地模拟真实世界的色彩效果。 #### 图形涂色技术的实际应用 在实际项目中,例如 Unity 开发的 AR 应用中,涂色技术通常需要结合图像跟踪和动态渲染。例如,通过将地球模型和框架模型作为子物体添加到预制体中,可以实现动态显示效果[^5]。 此外,在 C++ 等语言中实现图像填充时,可以借鉴 Matlab 的 `imfill("holes")` 函数,利用轮廓跟踪法获取边界坐标并进行填充[^4]。 ### 示例代码 以下是一个简单的 Flood Fill 实现示例: ```python def flood_fill(x, y, old_color, new_color, canvas): if x < 0 or x >= len(canvas) or y < 0 or y >= len(canvas[0]): return if canvas[x][y] != old_color or canvas[x][y] == new_color: return canvas[x][y] = new_color flood_fill(x+1, y, old_color, new_color, canvas) flood_fill(x-1, y, old_color, new_color, canvas) flood_fill(x, y+1, old_color, new_color, canvas) flood_fill(x, y-1, old_color, new_color, canvas) # 示例画布 canvas = [ [1, 1, 1, 1], [1, 0, 0, 1], [1, 0, 0, 1], [1, 1, 1, 1] ] flood_fill(1, 1, 0, 2, canvas) print(canvas) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值