題目描述
小w在計算乙個數列,其中a1=1,a2=2,an+2=an+1+an。儘管他計算非常精準,但很快他就弄混了自己的草稿紙,他找出了一些他計算的結果,但他忘記了這些都是數列中的第幾項。
輸入描述:
每行包括數列中的一項ak(k<=100000)。
總行數t<=30。
輸出描述:
對於每一項ak,輸出一行包括乙個正整數k表示輸入中數是數列的第幾項。
示例1輸入23
5813輸出23
456思路:
因為斐波拉契數列後面都是大數,沒有辦法記錄實際的值
乙個巧妙的辦法是選擇幾個質數取模,用得到的幾個餘數來表示乙個數的值
沒有兩個項的餘數陣列完全一樣
題目資料範圍1e5,因此預處理前1e5個數取模的餘數陣列
然後題目的大數輸入用字串,模擬一下大數取餘弄出餘數陣列
最後暴力查詢第乙個完全相同的項 的位置就行了
code:
#include
#include
#include
#include
#include
using
namespace std;
#define int long long
const
int maxm=
1e5+5;
int mod[5]
=;//用5個質數
int f[maxm][5
];void
init()
}for
(int i=
2;i}char s[maxm]
;signed
main()
;//存放輸入的數對於五個質數取模的值
for(
int i=
0;ifor(
int i=
0;iif(ok)}}
return0;
}
一列多行合併一列一行
方法1 定義臨時的varchar變數,通過游標一條條讀取,然後在迴圈中改變臨時變數的值最終輸出 關於游標的方法,這裡再敘述。sql2008中的方法 create table tb id int,value varchar 10 insert into tb values 1,aa insert in...
一列拆分為多列
表1 col 11 22 33 22 33 44 33 55 44表2 col1 col2 col3 11 22 33 22 33 44 33 55 null 44 null null 就是要把表1轉化成表2的形式,但是表1中的col 例如11 22 33是我自己測試的,不確定有多少項組成。也可能出...
mysql update更新某一列為另一列
update sys user set new field old field 將同乙個表中兩個型別一樣的字段的值互換 update t user u1,t user u2 set u1.signed time u2.create time,u2.create time u1.signed time...