1. 程式人生 > >2017.07.10【NOIP提高組】模擬賽B組

2017.07.10【NOIP提高組】模擬賽B組

font mic 集合點 之間 現在 problem 決定 family 打破

Summary

  今天題目總體不是難,但是分數很低,只有100+10+30,其中第二題還是以前做過的,第一題設計數論,而且以前做過同一個類型的題目,比賽推了很長時間。第三題時以前做過的原題,是貪心沒學好啊!方法也不夠周到,數據看得不仔細。

Problem

T1 可見點數

題目大意

  我更改了一下,但是求的東西是一樣的。已知有n*n個人在一個n*n網絡的格點上,有個人在(1,1)的位置,問他能看到多少個人的臉,不包括自己。

想法

  已知一個定理,說得籠統一點,(x,y)和(x+a,y+b)點連一條邊,其中經過的整點數(不包括(x+a,y+b),包括(x,y)),就是Gcd(a,b)的值,

我不會證,證了也看不懂在這裏就不證了

  那麽根據這個定理,我們得出,這道題其實就是求(x,y)~(1,1)連一條邊(x=1~n,y=1~n),問問多少條邊之間沒有整點(包括(1,1),不包括(x,y),後面如此)

  根據上面的定理,也就是說,求Gcd(x-1,y-1)=1(x=1~n,y=1~n)的個數,這樣顯然可以得到40分

  仔細觀察我們可以得出,Gcd(x-1,y-1)可以轉化成2φ(i)(i=2~n-1)再加上特殊的2個點((2,1),(1,2)),最後再加上1個點((2,2)),就是答案了

  求φ的時候,一定要加優化

T2 射擊

題目大意

  兩人決定用彈弓打破社區裏的一些窗戶,但是彈弓每秒只能徹底打破一扇窗戶。而且如果某戶窗戶的主人回來了的話,他們就不能進行破壞了。打破不同的窗戶獲得的快樂值可能不同,現在他們想知道在能活著的情況下能夠獲得的最大快樂值。

想法

  這道題以前也做過,比賽想了很多鳥不拉屎,牛頭不對馬嘴的貪心,結果怎麽弄都有反例,巧的是,也跟正解一樣使用了堆

  按時間從小到大排序,當前堆的元素個數為時間,如果時間符合條件的,插入堆,時間不符合條件的,看看它是否比堆中元素最小值大,如果大的話,就替換,也就是不選之前的,選之後的。

  最後的價值,就是堆的元素之和

  註意判斷負數,註意類型,註意快排超時。

T3 創世紀

題目大意

  給出N個點,每個點有且只有一個被其限制的點,要求選出一個最大的點集,使得每一個集合內的點都有一個集合外的點限制它。

想法

  貪心。找出所有沒有入度的點,那麽這些點必定不能選入集合中,我們沿著這些點上溯,將可以選進集合的點都選進集合。這裏“可以選進”的定義為存在一個沒有被選進集合的上一個,連著它的。於是環上就會有若幹個由樹上決定它要選進集合的點。我們將環按照已選入集合的點來分裂成若幹段,每一段按照原來的貪心方法來貪心即可。

  環的話,個數就是環中元素整除2。

  上面說得難懂,幾句話,就是

  把入度為0的加入隊列,將他們連著的點加入集合,然後再將他們連著的點,在連著的點加入隊列,然後刪掉入度為0的點連著的邊

  一直這麽做

  結果就是集合點的個數,加上每個環,每個環個數整除2,的和,就是答案。

2017.07.10【NOIP提高組】模擬賽B組