想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全
真题来源:防疫大数据
解题思路:
这题感觉应该是读题比较难,建议那个笔写一遍捋一下情况,每个值是干嘛的搞清楚才开始写,然后就按要求写,但因为原先没考虑题中的三个特殊情况,属于读题不严,得到10分代码;
10分题解:
- # 输入n,代表数据的天数
- n = int(input())
- # 设置place来存储每天的风险地区
- place = {}
- # 设置people来存储用户的漫游数据
- people = {}
- # 开始遍历每一天
- for i in range(n):
- # people[i]来存储每一天的漫游信息
- people[i] = []
- # 输入当日收到的风险地区信息的数量、当日收到的漫游数据的条目数量,以及当日收到的风险地区的列表
- data = [i for i in map(int,input().split())]
- # 表示当日收到的风险地区信息的数量
- r = data[0]
- # 表示当日收到的漫游数据的条目数量
- m = data[1]
- # 存储当日收到的风险地区的列表
- if r!=0:
- for d in data[2:]:
- # 遍历将从今日起的风险地区标记七日风险
- for q in range(i,i+7):
- if q not in place:
- place[q] = set()
- place[q].add(d)
- # 接收漫游信息,并存储到people[i]中去
- if m!=0:
- for j in range(m):
- ud,u,ur = map(int,input().split())
- if ud<0:
- continue
- people[i].append([ud,u,ur])
- # 设置t,确保日期循环最早从第0天开始
- t = max(0,i-6)
- # 存储输出日期及用户
- out = []
- # 提取此前七天每天用户的漫游信息
- for h in range(t,i+1):
- # 用hu存储当前天的用户漫游信息
- hu = people[h]
- # 开始遍历hu中的漫游信息
- for k in range(len(hu)):
- d = hu[k][0]
- u = hu[k][1]
- r = hu[k][2]
- if d<(i-6):
- continue
- # 设置一个标签值
- temp = 1
- # 判断是否持续处于风险区
- for l in range(d,i+1):
- if l not in place:
- temp = 0
- break
- if r not in place[l]:
- temp = 0
- break
- if temp:
- out.append(u)
- # 将用户从小到大排序
- out.sort()
- # 插入日期
- out.insert(0,i)
- print(*out)
运行结果: 
40分题解:
改进项:
![]()
增加了对重复数据的一个筛选去重,将分数提升到40分了;
- # 输入n,代表数据的天数
- n = int(input())
- # 设置place来存储每天的风险地区
- place = {}
- # 设置people来存储用户的漫游数据
- people = {}
- # 开始遍历每一天
- for i in range(n):
- # people[i]来存储每一天的漫游信息
- people[i] = []
- # 输入当日收到的风险地区信息的数量、当日收到的漫游数据的条目数量,以及当日收到的风险地区的列表
- data = [i for i in map(int,input().split())]
- # 表示当日收到的风险地区信息的数量
- r = data[0]
- # 表示当日收到的漫游数据的条目数量
- m = data[1]
- # 存储当日收到的风险地区的列表
- if r!=0:
- for d in data[2:]:
- # 遍历将从今日起的风险地区标记七日风险
- for q in range(i,i+7):
- if q not in place:
- place[q] = set()
- place[q].add(d)
- # 接收漫游信息,并存储到people[i]中去
- if m!=0:
- for j in range(m):
- ud,u,ur = map(int,input().split())
- if ud<0:
- continue
- people[i].append([ud,u,ur])
- # 设置t,确保日期循环最早从第0天开始
- t = max(0,i-6)
- # 存储输出日期及用户
- out = []
- # 提取此前七天每天用户的漫游信息
- for h in range(t,i+1):
- # 用hu存储当前天的用户漫游信息
- hu = people[h]
- # 开始遍历hu中的漫游信息
- for k in range(len(hu)):
- kd = hu[k][0]
- ku = hu[k][1]
- kr = hu[k][2]
- if d<(i-6):
- continue
- # 设置一个标签值
- temp = 1
- # 判断是否持续处于风险区
- for l in range(kd,i+1):
- if l not in place:
- temp = 0
- break
- if kr not in place[l]:
- temp = 0
- break
- if temp:
- out.append(ku)
- # 将用户进行去重并从小到大排序
- out = list(set(out))
- out.sort()
- # 插入日期
- out.insert(0,i)
- print(*out)
运行结果:

满分题解:
改进项:
