題目描述
今年就這麼結束了, 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...