細節知識 奇淫巧技

2022-03-22 21:18:54 字數 3070 閱讀 5599

s[i]-'a' + 'a'  (-32    //小寫字母變大寫 ;

ch = 

ch + 'a'- 'a'

; //大寫字母變小寫

ans:,s[i]裡面應該儲存的是字元吧,如果大寫字母,s[i]-'a',應該是轉換成小寫,如果是其他的字元應該是將去'a'的ascii碼.

0 % 20 = 0,1 % 20 = 1, 2 % 20 = 2, 3 % 20 = 3, ..., 19 % 20 = 19

20 % 20 = 0,21 % 20 = 1,22 % 20 = 2,23 % 20 = 3, ...,39 % 20 = 19

設f(x)=x除以a的餘數(a>0),則f(x)的週期為a(這裡指最小的週期),取值從0,1,2,3,4,5,…,a按週期性變化。

舉個例子f(x)=x除以7的餘數,則

x=0 f(x)=0

x=1 f(x)=1

x=2 f(x)=2

x=3 f(x)=3

x=4 f(x)=4

x=5 f(x)=5

x=6 f(x)=6

x=7 f(x)=0

x=8 f(x)=1

x=9 f(x)=2

x=10 f(x)=3

x=11 f(x)=4

x=12 f(x)=5

x=13 f(x)=6

x=14 f(x)=0

x=15 f(x)=1

x=16 f(x)=2

x=17 f(x)=3

x=18 f(x)=4

x=19 f(x)=5

x=20 f(x)=6

…2. 如果 m % n = r,那麼可以推出如下等式

m = k * n + r (k為大於等於0的整數, r <= m)

3. 同余式, 表示正整數a,b對n取模,它們的餘數相同,記做 a ≡ b mod n或者a = b (mod n)。

根據2的等式可以推出 a = kn + b 或者 a - b = kn

證明:   ∵ a = k1 * n + r1

b = k2 * n + r2

∴ a - b = (k1 - k2) * n + (r1 - r2)

a = k * n + (r1 - r2) + b

∵ a, b對n取模同餘,r1 = r2

∴ a = k * n + b (k = k1 - k2)

4. 模運算規則, 模運算與基本四則運算有些相似,但是除法例外。其規則如下

(a + b) % n = (a % n + b % n) % n            (1)

(a - b) % n = (a % n - b % n) % n              (2) 

(a * b) % n = (a % n * b % n) % n             (3)

ab % n = ((a % n)b) % n                             (4)

因為迴圈佇列是乙個環,而這個環在達到末尾的時候再挪到下乙個的時候就應該指到初始位置了。而取餘這個操作可以滿足乙個數一直加但是最終結果一直在0和被除數之間迴圈的要求。

舉個例子,比如說乙個長度為6的迴圈佇列:

0-1-2-3-4-5-

比如說我要加進去8個數字0-7,每個位置乙個數字。那麼數字0(第1個數字)就在佇列0的位置、數字1在佇列中1的位值 ... 數字5在佇列5的位置上。那麼數字6呢?按照迴圈佇列的要求,5的下乙個位置是0,但是怎麼才能根據已知條件(第n個數字和佇列長度6)來求出這個0呢 那就要用到取餘了。

6(第7個數字)%6(佇列長度) = 0 那麼這個6 就放在0 的位置上

繼續,7(第8個數字)%6(佇列長度) = 1 那麼這個7 就放在1 的位置上

現在比如說你有許多個數字要放進乙個長度為 l 的迴圈佇列中, 那麼第n個數字要放在佇列中的位置x就是

x = ( n - 1 ) % l

總結一下取餘的目的就是為了讓乙個公差為1的遞增序列變為在乙個從0到l範圍內迴圈的數列。(

迴圈佇列中 當對頭出佇列 隊尾進佇列 存在front的值大於rear的情況

此時rear-front 的值就為負的  而加上maxsize後 就剛好補過來

假設1:maxsize=5     rear=0, front=4,  rear是指向隊尾的下乙個單元 也就是現在的rear指的單元沒有存放資料因為front=4,若是front=0 就不是這種情況。 此時的佇列長度1 ,如果不採用

length=(rear - front + maxsize) % maxsize的方法  得到錯誤的結果是 rear-front = -4 而採用剛才的演算法就真好是 1。

假設2:maxsize=5   rear=3, front=0, 此時的對長是3,  length=(rear - front + maxsize) % maxsize算的的結果也是3。相當 length = rear - front + 0

所以, 之所以在rear-front後面加上maxsize是為了避免假設1 當中的情況產生, 而,後面取餘 是為了在避免假設1:的基礎上去避免假設2:的產生。 綜合來說,單存在假設1 可以不要取餘,單存在假設2 在計算隊長的時候可以什麼都不要,只要rear-front 即可。

在acm中  一丁點錯誤就足以造成你的失敗

關於 double float 的精確度問題     

double比float 精絕度要高     精確到小數點6位左右

在在**中對浮點資料型別直接使用== 、<= 、>=、 !=等運算子進行比較都是不正確的。

正確的方法應該是 將其差或和於小數進行比較   通常與10^6 比較

如浮點數與零的比較:

等於0關係:  fabs(i)<=1e-6

大於0關係:  i>1e-6

小於0關係:  i<1e-6

在三角形中  任意2邊大於第三邊   a+b>c  如果直接這樣寫  會造成無法ac       如果這樣寫 a+b-c>1e-6   則是可以ac的 

所以在做題過程中注意  對於浮點型千萬不要直接比較

SQL語句奇淫巧技

不論乙個sql中涉及到多個表,每次都用兩個表 結果集 操作,得到新的結果後,再和下乙個表 結果集 操作。避免在select f1,select f2 from tableb from tablea 這樣得到欄位列。直接用tablea和tableb關聯得到a.f1,b.f2就可以了。避免隱含的型別轉換...

關於linux程式設計的奇淫巧計系列的FAQ

自從發布linux程式設計的奇淫巧計系列以後,很多讀者給我寫來郵件,這裡我一併作答。1 你寫的內容有多少是實踐中可以用到的?還是只是花裡胡哨的東西?答 我負責的告訴你,大部分都是工程實踐中用到的,否則我哪能想到這麼些個花招,大部分都是我在工作實踐和知名開源 中看來得,如果有長期看開源 的朋友應該能體...

關於linux程式設計的奇淫巧計系列的FAQ

自從發布linux程式設計的奇淫巧計系列以後,很多讀者給我寫來郵件,這裡我一併作答。1 你寫的內容有多少是實踐中可以用到的?還是只是花裡胡哨的東西?答 我負責的告訴你,大部分都是工程實踐中用到的,否則我哪能想到這麼些個花招,大部分都是我在工作實踐和知名開源 中看來得,如果有長期看開源 的朋友應該能體...