CCF-CSP真题《202209-4—吉祥物投票》思路+python题解
?想查看其他題的真題及題解的同學可以前往查看: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。接下來是緊張刺激的拉票環節,作品的設計者們要想方設法給自己的作品拉票,這一過程中可能出現如下若干種事件: 1 l r x:編號為?x?的作品開展了一場拉票活動,成功地吸引了編號為?l~r?的投票者的興趣,使得他們的投票意愿全部改為?x。 2 x w:編號為?x?的作品需要經歷一次大規模修改,所以需要暫時退出競選。由于?x?與?w?兩個作品的風格較為相近,因此原先投票意愿為?x?的投票者的投票意愿變為了?w。特別地,若?w=0,表示這些投票者暫時找不到新的支持的作品。需要注意的是,作品?x?退出競選只是暫時的,因此后續的事件中作品?x?仍可能出現。 3 x y:主辦方發現自己的統計出現了失誤,將編號為?x?和?y?的作品弄顛倒了。發布勘誤后,所有原先投票意愿為?x?的投票者的投票意愿變為了?y,所有原先投票意愿為?y?的投票者的投票意愿變為了?x。 4 w:主辦方決定進行一次調查:希望知道所有投票者中,當前投票意愿為?w?的有多少人。若?w≠0?,相當于調查有多少投票者目前支持作品?w?,否則相當于調查有多少投票者目前沒有支持的作品。 5:主辦方決定進行一次調查:若以現在的投票意愿進行最終的投票,獲勝的作品是哪一個。規定得票數至少為?1?且最多的作品獲勝,得票數相同則編號較小的作品獲勝。特別地,若所有作品均無得票,認為不存在獲勝作品。 從拉票開始到結束,共出現了?q?次如上的事件。由于參選的作品數和投票人數實在太多,單憑活動主辦方的能力難以全面統計,現在請你編寫一個程序來處理這些事件,并求出每次調查的結果。 輸入格式從標準輸入讀入數據。 第?1?行,3?個正整數?n,m,q。 接下來?q?行,每行?1~4?個非負整數,描述一個事件。 輸出格式輸出到標準輸出。 對于每個?4?或?5?事件輸出一行,一個非負整數表示此次調查的結果。其中事件?5?若不存在獲勝作品則輸出0。 樣例輸入10 2 15 樣例輸出0 評測用例規模與約定
對于所有的數據,滿足?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] = xdef alter(ticket):x = ticket[1]w = ticket[2]for i in range(n):if people[i]==x:people[i] = wdef exchange(ticket):x = ticket[1]y = ticket[2]for i in range(n):if people[i]==x:people[i] = yelif people[i]==y:people[i] = xdef 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]] += 1print(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()運行結果:?
滿分題解:
總結
以上是生活随笔為你收集整理的CCF-CSP真题《202209-4—吉祥物投票》思路+python题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工厂模式以及应用简单解释
- 下一篇: scrapy框架学习(三)Spiders