1. 程式人生 > >牛客OI賽制測試賽2 D 星光晚餐

牛客OI賽制測試賽2 D 星光晚餐

比較 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×10
6
對於100%的數據:n≤10
18

這道題目與開關燈問題比較相似,就是數據不知道大了多少倍。

開始大大暴力你會發現前三個都是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 星光晚餐