算法之数学--hash算法 2021-03-11(未完待续)

1.hash算法

刷出一道墙

题目描述

Time Limit: 2000 ms
Memory Limit: 256 mb
在一面很长的墙壁上,工人们用不同的油漆去刷墙,然而可能有些地方刷过以后觉得不好看,他们会重新刷一下。有些部分因为重复刷了很多次覆盖了很多层油漆,小诺很好奇那些地方被刷过多少种颜色的油漆。

输入描述:

若干行输入,每行两个数字B[i],Ei表示这次刷的墙壁是哪一段
(假设每次刷的时候油漆颜色都和之前的不同),以0 0结束
又若干行输入,每行两个数字begin[i],end[i](0<=begin[i]<=end[i]<=200000)表示小诺询问的段,
以0 0结束

输出描述:

对于每个小诺的询问输出(end[i]-begin[i]+1)行,表示对应询问段的每个点被多少种颜色的油漆覆盖过。

代码
#include <bits/stdc++.h>
using namespace std;

const int maxn = 2e5+5;
int f[maxn];

int main(){
	int a,b;
	while(1){
		scanf("%d%d",&a,&b);
		if(a==0&&b==0)
			break;
		f[a]++;
		f[b+1]--;
	}
	//妙啊 移位
	for(int i=0;i<maxn;i++)
		f[i] +=f[i-1];

	while(1){
		scanf("%d%d",&a,&b);
		if(a==0&&b==0)
			break;
		for(int i=a;i<=b;i++){
			printf("%d\n",f[i]);
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值