牛客OI賽制測試賽2 D 星光晚餐
阿新 • • 發佈:2018-09-07
比較 pac 最終 clip 測試 tdi long 關燈問題 mat
鏈接:https://www.nowcoder.com/acm/contest/185/D
來源:牛客網
題目描述
Johnson和Nancy要在星光下吃晚餐。這是一件很浪漫的事情。
為了增加星光晚餐那浪漫的氛圍,他拿出了一個神奇的魔法棒,並且可以按照一定的規則,改變天上星星的亮暗。
Johnson想考考Nancy,在他揮動魔法棒後,會有多少顆星星依舊閃耀在天空。他知道,Nancy一定會一口說出答案。
Nancy當然知道怎麽做啦,但她想考考你!
Johnson先將天上n個星星排成一排,起初它們都是暗的。
他告訴他的妹子,他將揮動n次魔法棒,第i次揮動會將編號為i的正整數倍的星星的亮暗反轉,即亮的星星轉暗,暗的星星轉亮。
Johnson想問Nancy,最終會有多少個星星依舊閃亮在天空。
輸入描述:
一個整數n,含義請見題目描述。
輸出描述:
一個整數ans,即n次操作後會有多少個星星依舊閃亮。示例1
輸入
復制3
輸出
復制1示例2
輸入
復制7
輸出
復制2
備註:
對於60%的數據:n≤2×106
對於100%的數據:n≤1018
這道題目與開關燈問題比較相似,就是數據不知道大了多少倍。
開始大大暴力你會發現前三個都是1,再往後5個都是2,往後7個都是3,往後9個都是4....。
1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4...
那麽定義一個數組a[1]=3,a[2]=8,a[3]=15....,a[i]=j(表示到j之前的數為i)。
處理好數組按照這個規律可以過$60%$的。
然而我們並不滿足:
現在我們再來觀察a數組,3,8,15 這是不是平方數-1,每個數自變幻的臨界點為每個平方數,顯然的出結論$ans= \sqrt n $,然而並不會證明。
#include <algorithm> #include<iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; long long n; //註意開long long int main() { scanf("%lld",&n); n=sqrt(n); printf("%lld",n); }
牛客OI賽制測試賽2 D 星光晚餐