noi Big String 超級字符串
阿新 • • 發佈:2017-05-27
數字 sin ams com blog size nbsp src menu
//來自2017青島信息競賽第一題
9269:Big String超級字符串
- 查看
- 提交
- 統計
- 提問
- 總時間限制:
- 10000ms
- 單個測試點時間限制:
- 1000ms
- 內存限制:
- 131072kB
- 描述
-
fish在無數次oi競賽的獄煉之後,悟出一個真理,往往越容易的題目,陷阱越深。由此,fish創作了這道題目。
fish首先給出兩個短串A=’4567’ (4個字符), B=’123’(3個字符)。反復進行如下的操作得到一個長串C。
(1)C=B+A (例如:A=’4567’ ,B=’123’ C=B+A=’1234567’)
(2)A=B B=C (上述例子 A=’123’ B=’1234567’)
請你編程找出這個長串的第n個字符。 - 輸入
-
第一行包含一個整數 n (1<=n<=10^9)
- 輸出
-
僅一行,包含一個字符,表示這個長串的第n個字符。
- 樣例輸入
-
9
- 樣例輸出
- 2
-
比賽發揮不好,明明已經找到正解了,卻卡了一下,沒處理出來
其實很簡單,不要直接處理字符串,轉化成數字
可以發現整個字符串就是“1234567”不斷拓展出去的
每一個新子串都可以看做是1234567或它的子串組成的
那麽我們只需要知道第n位是1234567 中的第幾位,而對這個那麽長的子串究竟是什麽根本沒用=。=
用數字存一共有幾位,然後處理
例如9,
我們發現一次運算後c長7,第二次長...
9就在這之間
說明需要進行兩次拓展才有第九位
然而前七位對我們來說是沒用的
所以直接不管
因此九位為就相當於剩下的第二位,小於7,所以直接得到(若大於7只需重復上述過程)
附AC代碼#include<cstring> #include<cstdio> #include<iostream> using namespace std; string s; int l,n,pr; int main(){ s="1234567"; int a=4,b=3; scanf("%d",&n); while(n>7){ a=4;b=3; l=0;pr=0; while
noi Big String 超級字符串