#S1017. Sanhai的文件分类Ultra

Sanhai的文件分类Ultra

Sanhai的文件分类Ultra

题目背景

CSP2025 S组的比赛数据在解压时发生异常,四道题目的测试文件全部散落在一个网格窗口中。Sanhai的文件夹是按照名称排序的,他必须使用鼠标圈选矩形区域来分类文件。分类过程中文件位置会不断重排,Sanhai需要最快分类文件以尽快上传到OJ上

任务描述

Sanhai需要完成以下操作:

  1. 为每道题目创建同名文件夹
  2. 将属于该题目的所有文件移入对应文件夹
  3. 必须在完整处理完一道题的所有文件后,才能开始处理下一题
  4. 分类必须是正确的
  5. 打开文件夹算一次操作,把文件移除文件夹也算一次操作

鼠标圈选操作必须满足:

  • 圈选的矩形区域大于1×11×1(至少包含11个单元格)

输入格式

第一行包含两个整数nnmm,表示网格的行数和列数2n,m1052\le n,m \le 10^5

接下来nn行,每行mm个字符串,描述网格初始状态:

  • 文件名格式为:XYY.Z(XXADA-D的大写字母,YYYY011001-10的两位编号,Z为"in"或"out")
  • 空单元格用"."表示
  • 文件名保证合法,且属于AABBCCDD四道题目之一
  • 每个测试点有.in.out两个文件 areyouok

输出格式

一个整数,表示完成所有文件分类所需的最小鼠标圈选操作次数

样例

样例输入1

4 7
B01.in B01.out B02.in B02.out A01.in A01.out A02.in
A02.out C01.in C01.out C02.in C02.out D01.in D01.out
D02.in D02.out . . . . .
. . . . . . .

样例输出1

4

样例输入2

4 7
A01.in A01.out A02.in A02.out B01.in B01.out B02.in
B02.out C01.in C01.out C02.in C02.out D01.in D01.out
D02.in D02.out 

样例输出2

5

样例输入3

4 7
A01.in A01.out A02.in A02.out A03.in A03.out B01.in
B01.out B02.in B02.out B03.in B03.out C01.in C01.out
C02.in C02.out C03.in C03.out D01.in D01.out D02.in
D02.out D03.in D03.out 

样例输出3

7

样例解释

样例1解释

  • 网格大小:4×7
  • 每道题有2个文件(1个测试点)
  • 文件位置随操作动态变化:
    1. 创建文件夹"A"后,A题文件集中出现 → 11次圈选
    2. 创建文件夹"B"后,B题文件集中出现 → 11次圈选
    3. 创建文件夹"C"后,C题文件集中出现 → 11次圈选
    4. 创建文件夹"D"后,D题文件集中出现 → 11次圈选
  • 总圈选次数:44

样例2解释

  • 网格大小:4×74×7
  • 每道题有44个文件(22个测试点)
  • 关键变化:
    1. 前三道题文件集中 → 各需11次圈选
    2. 处理最后一道题时,文件被分割成两部分:
      • 第一部分:33个文件 → 11次圈选
      • 第二部分:11个文件+空位 → 需额外11次圈选
  • 总圈选次数:3+2=53+2=5

样例3解释

  • 网格大小:4×74×7
  • 每道题有6个文件(3个测试点)
  • 文件被严重分割:
    1. A文件分22次圈选
    2. B文件分11次圈选
    3. C文件分22次圈选
    4. D文件分22次圈选
  • 总圈选次数:2+1+2+2=72+1+2+2=7

数据范围

  • 30%30\%数据:n×m102n×m \le 10^2
  • 60%60\%数据:n×m202n×m \le 20^2
  • 100%100\%数据:2n,m1052 \le n,m \le 10^5