【题解】流感传染
【题目描述】
有一批易感人群住在网格状的宿舍区内,宿舍区为n\*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。
【输入描述】
第一行一个数字n,n不超过100,表示有n*n的宿舍房间。
接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。
接下来的一行是一个整数m,m不超过100。
【输出描述】
输出第m天,得流感的人数。
【样例输入】
5 ....# .#.@. .#@.. #.... ..... 4
【样例输出】
16
数列分段
题目描述
输入格式
第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值;
第2行包含N个空格隔开的非负整数A[i],如题目所述。
输出格式
样例输入
5 6 4 2 4 5 1
样例输出
3
提示
【数据范围】
对于20%的数据,有N≤10;
对于40%的数据,有N≤1000;
对于100%的数据,有N≤100000,M≤109,M大于所有数的最小值,A[i]之和不超过109。
线段
题目描述
输入格式
输出格式
样例输入
3 0 2 2 4 1 3
样例输出
2
提示
【数据规模】
对于20%的数据,n≤10。
对于50%的数据,n≤1000。
对于70%的数据,n≤100000。
对于20%的数据,n≤1000000,0≤ai<bi≤1000000。
糖果传递
题目描述
输入格式
第一行一个正整数n≤1000000,表示小朋友的个数.
接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.
输出格式
样例输入
4 1 2 5 4
样例输出
4
家庭作业
【算法】滑动窗口2—窗口大小可变
对于滑动窗口第二类:窗口大小可变类型
图解如下,类似双指针算法。
【解题思想】
1、字符串 S 中使用双指针的左右指针技巧,初始化
left = right = 0
,把索引的左闭右开区间[left,right)
称为一个「窗口」。2、先不断增加 right 指针扩大窗口
[left, right)
(也就是right++
),直到窗口中的字符串符合要求:包含 T 中所有字符。3、停止增加 right ,转而不断增加 left 指针缩小窗口
[left, right)
(也就是left++
),直到窗口中的字符串不再符合要求:不包含 T 中所有字符。4、同时,每增加 left,都要更新一轮结果。
5、重复 2 & 3 步骤,直到 right 到达字符串 S 的尽头。
6、第 2 步骤寻找「可行解」(符合要求),第 3 步骤优化「可行解」(找最短),最终找到「最优解」(最短的覆盖子串)。
7、左右指针轮流前进,窗口大小增增减减,窗口不断向右滑动,这就是「滑动窗口」名字的来历。
【题解】黑色联通块
【题目描述】
输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计其中黑色连通块的个数。如果两个黑格子有公共边或者公共顶点,就说它们属于同一个联通块。如下图所示的图形有3个联通块。
【输入描述】
第1行输入一个正整数n(n≤700),此后输入n行,每行是由n个0或1组成的字符串。
【输出描述】
输出连通块的个数
【样例输入】
6 100100 001010 000000 110000 111000 010100
【样例输出】
3
【题解】Ride to Office
【题目描述】
起点与终点相隔4500米。现Charley 需要从起点骑车到终点。但是,他有个习惯,沿途需要有人陪伴,即以相同的速度, 与另外一个人一起骑。而当他遇到以更快的速度骑车的人时,他会以相应的速度跟上这个更快的人。先给定所有与Charley 同路的人各自的速度与出发时间,问Charley 以这种方式跟人,骑完4500米需要多少时间。得出的结果若是小数,则向上取整。
【输入描述】
输入若干组数据,每组数据第一行n(1≤n≤10000),n为0,表示输入结束,接着输入n行数据,每行2个数据,表示速度v和出发时间t,如果t<0,表示陪伴人提早出发了。
【输出描述】
输出对应若干行数据,每行输出1个数,表示最快到达的时间。
【样例输入】
4 20 0 25 -155 27 190 30 240 2 21 0 22 34 0
【样例输出】
780 771
【题解】走出迷宫的最少步数
【题目描述】
一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。
【输入描述】
第一行是两个整数,R和C,代表迷宫的行数和列数。( 1<= R,C <= 40)
接下来是R行,每行C个字符,代表整个迷宫。空地格子用’.‘表示,有障碍物的格子用’#‘表示。迷宫左上角和右下角都是’.’。
【输出描述】
输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
【样例输入】
5 5 ..### #.... #.#.# #.#.# #.#..
【样例输出】
9