想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全
试题编号: | 202209-4 | ||||||||||||||||||||||||||||||||||||||||
试题名称: | 吉祥物投票 | ||||||||||||||||||||||||||||||||||||||||
时间限制: | 1.0s | ||||||||||||||||||||||||||||||||||||||||
内存限制: | 1.0GB | ||||||||||||||||||||||||||||||||||||||||
问题描述: | 题目描述为了促进西西艾弗岛上的旅游业发展,当地决定设计一个吉祥物形象。活动吸引了众多设计领域的大师和爱好者参加,经过初步筛选,共选出了 m 个作品,编号为 1∼m,进行最终的投票角逐。 活动还吸引了西西艾弗岛上的 n 名投票者参与,编号为 1∼n,每人都在最终的投票环节拥有投一票的权利,也可以放弃投票。我们定义每个人的投票意愿 ai(1≤i≤n) 为一个 0∼m 的整数,若 ai=0 表示这个人目前没有支持的作品,打算放弃投票,否则表示这个人支持第 ai 号作品并有意愿将票投给它。 最初,由于所有人对参与竞选的作品都不了解,因此投票意愿 ai 均为 0。接下来是紧张刺激的拉票环节,作品的设计者们要想方设法给自己的作品拉票,这一过程中可能出现如下若干种事件:
从拉票开始到结束,共出现了 q 次如上的事件。由于参选的作品数和投票人数实在太多,单凭活动主办方的能力难以全面统计,现在请你编写一个程序来处理这些事件,并求出每次调查的结果。 输入格式从标准输入读入数据。 第 1 行,3 个正整数 n,m,q。 接下来 q 行,每行 1∼4 个非负整数,描述一个事件。 输出格式输出到标准输出。 对于每个 4 或 5 事件输出一行,一个非负整数表示此次调查的结果。其中事件 5 若不存在获胜作品则输出 样例输入
样例输出
评测用例规模与约定
对于所有的数据,满足 1≤n≤109,1≤m,q≤105,1≤l≤r≤n,1≤x,y≤m,0≤w≤m。保证事件 2 中 x≠w,事件 3 中 x≠y。 |
真题来源:吉祥物投票
解题思路:
看了一眼感觉很容易理解,也就按照每个动作直白写了操作,最后果不其然内存超了,拿了20分
20分题解(内存超限) :
n, m, q = map(int,input().split())
people = [0 for i in range(n)]
def pull(ticket):
l = ticket[1]
r = ticket[2]
x = ticket[3]
for i in range(l,r+1):
people[i] = x
def alter(ticket):
x = ticket[1]
w = ticket[2]
for i in range(n):
if people[i]==x:
people[i] = w
def exchange(ticket):
x = ticket[1]
y = ticket[2]
for i in range(n):
if people[i]==x:
people[i] = y
elif people[i]==y:
people[i] = x
def survey(ticket):
w = ticket[1]
if w != 0:
print(people.count(w))
else:
print(people.count(0))
def final():
if sum(people)==0:
print(0)
else:
temp = [0]*(m+1)
for i in range(n):
temp[people[i]] += 1
print(temp[1:].index(max(temp[1:]))+1)
for j in range(q):
ticket = [i for i in map(int,input().split())]
if ticket[0]==1:
pull(ticket)
elif ticket[0]==2:
alter(ticket)
elif ticket[0]==3:
exchange(ticket)
elif ticket[0]==4:
survey(ticket)
elif ticket[0]==5:
final()
运行结果:
满分题解: