wenbao与acm技巧(必备知识)
推薦博客:http://blog.csdn.net/xueerfei008/article/details/19029797 ? ?http://blog.csdn.net/xueerfei008/article/details/11834011
?
?
計算一個數中一的個數
?1 cout<<__builtin_popcount(7);?
?
?
提高速度
?1 std::ios::sync_with_stdio(false);?
?cin.tie(0),cout.tie(0);
?
程序運行時間
?
1 #include <stdio.h> 2 #include <time.h> 3 int main() { 4 clock_t start = clock(); 5 6 // Place your codes here... 7 for(int i = 0; i < 10000000; ++i){ 8 for(int j = 0; j < 100; ++j); 9 } 10 11 clock_t ends = clock(); 12 13 printf("Running Time :%lf\n", (ends - start) / CLOCKS_PER_SEC * 1000.0); 14 15 return 0; 16 }?
?
?
哎。。忘記是求什么的了
(n*m-1)/(m-1)
?
?
?
1*n+2*(n-1)+3*(n-2)+…+n*1=n(n+1)(n+2)/6
?
1+2+3+…+n=n(n+1)/2
12+22+32…+n2=n(n+1)(2n+1)/6
13+23+33+…n3=n2(n+1)2/4=[n(n+1)/2]2
1^4+2^4+3^4+...+n^4=n(n+1)(2n+1)(3n^2+3n-1)/30
1*2+2*3+3*4+4*5+…+n(n+1)=n(n+1)(n+2)/3
?
?
PI值
?const double PI = acos(-1.0);?
?
?
@關于for:
1 //處理字符串的時候可以這樣寫———— 2 for(int i = 0; str[i]; i++) 3 4 //但是處理數組只能這樣寫(不然多組輸入的時候會有問題出現,應為memse只是清除字符串的t) 5 for(int i = 0; i < n; i++)?
?
輸出到文本
?
1 #include <iostream> 2 using namespace std; 3 int main(){ 4 freopen("in.txt", "r", stdin); 5 freopen("out.txt", "w",stdout); 6 int a,b; 7 while(cin>>a>>b) cout<<a+b<<"\n"; 8 }?
1 #include <fstream> 2 using namespace std; 3 ifstream fin("abc.txt"); 4 ofstream fout("abcd.txt"); 5 int main(){ 6 int a,b; 7 while(fin>>a>>b) fout<<a+b<<"\n"; 8 return 0; 9 }?
?
?
?
@ 關于memset
?
大牛博客:http://www.cnblogs.com/LLGemini/p/4309660.html
?
1 memset是用于字符串處理的,不再多說,那么處理int數組怎么辦呢?要怎樣處理呢? 2 // *******char 是一個字節而int是四個字節 3 memset(a, 0, sizeof(a)); // 正確 4 memset(a, 1, sizeof(1)); // 錯誤,字節問題初始化的值為:16843009 5 int型的最大值為 0x7f,所以可以 memset(a, 0x7f, sizeof(a)); 初始化為最大值,但是非常容易爆int; 6 最精巧的無窮大常量取值是0x3f3f3f3f,0x3f3f3f3f的十進制是1061109567,也就是10^9級別的,0x3f3f3f3f+0x3f3f3f3f=2122219134,沒有爆int; 7 8 所以說0x3f3f3f3f是最棒的選擇 9 0x3f3f3f3f的每個字節都是0x3f!所以要把一段內存全部置為無窮大,我們只需要 10 memset(a,0x3f,sizeof(a)); 11 12 其他賦值: 13 memset(arr,0x7F,sizeof(arr)); //它將arr中的值全部賦為2139062143,這是用memset對int賦值所能達到的最大值 14 memset(arr,0x80,sizeof(arr)); //set int to -2139062144 15 memset(arr,0x7F,sizeof(arr)); //set double to 1.38242e+306 16 memset(arr,0xFE,sizeof(arr)); //set double to -5.31401e+303?
?
@ int? long long int 范圍
?
1 unsigned int 0~4294967295 0 ~ 4*10^9; 2 int -2147483648~2147483647 -1*2*10^9 ~ 2*10^9; 3 unsigned long 0~4294967295 0 ~ 4*10^9; 4 long -2147483648~2147483647 -1*2*10^9 ~ 2*10^9; 5 long long的最大值:9223372036854775807 9*10^18; 6 long long的最小值:-9223372036854775808 -1*9*10^18; 7 unsigned long long的最大值:18446744073709551615 1*10^19; 8 9 __int64的最大值:9223372036854775807 9*10^18; 10 __int64的最小值:-9223372036854775808 -1*9*10^18; 11 unsigned __int64的最大值:18446744073709551615 1*10^19;?
?
?@ 用c++11編譯
g++ -std=c++11 y.cpp -o y
?
@ 強制轉化
1LL
?
?
@ n的階乘的位數
?
@@ 斯特林公式
更加精確的近似公式為:
其中
?
?
?
?
利用斯特林(Stirling)公式求解n!的位數:
易知整數n的位數為[lg10(n)]+1.?
用Stirling公式計算n!結果的位數時,可以兩邊取對數,得:?
log10(n!) = log10(2*PI*n)/2+n*log10(n/E);?
故n!的位數為
res=log10(2*PI*n)/2+n*log10(n/E)+1
或者為:
long result = (long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1);?(編程更方便)
(注意:當n=1時,算得的結果為0)
n!的估計:
在高德納的《計算機程序設計藝術》一書中,對n!的估計:?
n! = sqrt(2*π*n) * ((n/e)^n) * (1 + 1/(12*n) + 1/(288*n*n) + O(1/n^3));
?
?
?
?
x = log10N!
long result = (long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1);
?
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 int main(){ 5 int n, t; 6 cin >>t; 7 while(t--){ 8 cin>>n; 9 if(n==1) cout<<1<<endl; 10 else{ 11 long result = (long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1); 12 cout<<result<<endl; 13 } 14 } 15 return 0; 16 }?
?
?
@ memcpy函數
memcpy(a, b, sizeof(a));
將b賦值給a,b是源
?
?
@ 必備數學知識
大牛博客:http://blog.sina.com.cn/u/2056445344
?
求與?y=-x-1,?y=x-1,?y=0?三條直線相切的拋物線的方程
?
?
三角形垂心坐標公式
?
?
三角形重心坐標公式及歐拉線
平面三角形外心坐標公式
?
平面三角形內心坐標公式
?
注:若在上述去絕對值時,適當地變動符號,可以推是其他三個旁心坐標公式。實質上內心與旁心是一樣的!旁心是內心的延伸,內心是到三邊所對應的線段,而旁心是三邊所對應的直線。
?
?
?
?
?
?
斐波那契額數列
?
?
字符輸入
1 char read(){ 2 char ch; 3 for(;;){ 4 ch = getchar(); 5 if(ch >= 'A' && ch <= 'Z') return ch; 6 } 7 }?
for循環
??1 #define REP(i, n) for(int i = 0; i < n; i++)?
?
組合數學
?
?1 C(n+1, k+1) = C(n, k) + C(n, k+1)
2 C(n, k+1) = C(n, k)*(n-k)/(k+1)?
?
只有不斷學習才能進步!
?
轉載于:https://www.cnblogs.com/wenbao/p/5727729.html
總結
以上是生活随笔為你收集整理的wenbao与acm技巧(必备知识)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jmeter基础(二)
- 下一篇: 利用@jsonView注解来实现自定义返