D 關燈問題(規律或二分)

2021-09-25 20:27:25 字數 1519 閱讀 7416

題目描述

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

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

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

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

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

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

輸入描述

第一行乙個整數tt表示資料組數

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

輸出描述

共tt行, 每行乙個字串"on"或"off"表示目前燈是開著還是關著的

具體見樣例

樣例輸入

901

2345

678

樣例輸出

on

offon

onoff

onon

onoff

樣例描述

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#include#include#includeusing namespace std;

#define ll long long

int main()

return 0;

}

二分

#includeusing namespace std;

typedef long long ll;

typedef unsigned long long ull;

ll n;

int main()

if(n==1)

ll l=1,r=(ll)1e9,a,b;

while(lb)

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;

}

二分查詢或折半查詢

include include intmybsearch int a,int low,int high,int target else if a mid else 比較找元素的規則 intcompare const void pleft,const void pright intmain int p...

二分查詢問題

常見的二分查詢問題 1 給定排序陣列求乙個給定數在陣列中的下標,如果不存在就返回應該插入的位置 int searchinsert int a,int n,int target else return start 2 給定乙個 排序陣列,然後經過旋轉後,查詢給定值是否在陣列中。思路 1 先看左邊有序還...

二分查詢問題

二分查詢 要注意 1.迴圈判斷條件應該是 low high,否則在key值剛好等於某一次迴圈的high或者low時無法執行.2.middle low high low 2 防止溢位 3.根據問題要求選擇邊界值的改變方式 因為迴圈條件,最後會出現low和high在key的兩邊,且有關係low high...