日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

D. 关灯问题(规律或二分)

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 D. 关灯问题(规律或二分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

今年就這么結束了, zdw感到十分失望

藍橋杯寫錯簽到題, cf rating狂掉, 最后區域賽打銅, 還突然變成JBer了

失落的zdw準備睡覺(真咸魚), 他想關燈, 然而發現開關壞了

zdw憤怒地敲擊著開關, 然后發現一個很神奇的事情:

如果燈之前已經關過了xx次, 那么下一次打開它以后再關上它需要使用x+1x+1次開關

具體情況請參考樣例. 一開始燈是開著的

?

輸入描述

第一行一個整數TT表示數據組數

接下來TT行每行一個整數nn表示zdw使用開關的次數

?

輸出描述

共TT行, 每行一個字符串"ON"或"OFF"表示目前燈是開著還是關著的

具體見樣例

?

樣例輸入

9 0 1 2 3 4 5 6 7 8

?

樣例輸出

ON OFF ON ON OFF ON ON ON OFF

?

樣例描述

0次時就是初始狀態, 顯然燈是開著的

1次時之前燈沒有關上過, 所以按1次后燈就關上了, 是OFF

2次時燈重新被打開了

3-4次時因為燈之前已經關上1次了, 所以需要按2下來讓燈再次關上(按完第4下后關上了)

5次時燈又重新被打開了

6-8次時因為燈之前已經關上2次了, 所以需要按3下來讓燈再次關上(按完第8下后關上了)

數據范圍

TT?<=?100000

nn?<=?10^18

子任務1:(10分)

nn?<=?10^8

子任務2:(20分)

無其他限制

題目來源

zdw1999

因為題目給出的數據過大,故找出規律

1=1 ? ?4=1+3 ? ? 8=1+3+4 ? 13=1+3+4+5 ? 19=1+3+4+5+6 ?26=1+3+4+5+6

m+2=n*(n+1)/2

#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; #define LL long long int main() {int T;scanf("%d",&T);LL n;while(T--){scanf("%lld",&n);LL mod=(LL)sqrt(2*n+4);if(mod*(mod+1)==2*n+4)printf("OFF\n");elseprintf("ON\n");}return 0; }

?

二分

#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; ll n; int main() {int T;scanf("%d",&T);while(T--){scanf("%lld",&n);if(n==0){puts("ON");continue;}if(n==1){puts("OFF");continue;}ll l=1,r=(ll)1e9,a,b;while(l<r){ll mid=(l+r+1)/2;a=1LL*mid*(ll)(5+mid);b=2LL*(n-1);if(a>b)r=mid-1;else l=mid;}a=1LL*l*(5+l);b=2LL*(n-1);if(a==b)puts("OFF");else puts("ON");}return 0; }

?

總結

以上是生活随笔為你收集整理的D. 关灯问题(规律或二分)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。