unsigned int 0~4294967295
int 2147483648~2147483647
unsigned long 0~4294967295
long 2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
2. 標頭檔案
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;//無窮大
int dx[8]=;//八個方向
int dy[8]=;
int dir[4][2]=;//四個方向(應用於搜尋題)
3. 常用函式
#include
int getchar();//讀取乙個字元,一般用來去掉無用字元,如回車符等
char *gets(char *str);//讀取一行字串
#include
void *malloc(size_t size);//動態分配記憶體,開闢大小為size的空間
void sort();//快速排序,c++
/*呼叫*/sort(a,a+n);//從小到大sort(a,a+n,cmp);//從大到小
void qsort();//c
#include
可直接呼叫函式:正弦sin(), 反正弦asin(), 對數log(), 平方根sqrt(), 次方pow(n,x)。
#include
memset(array,0,sizeof(array));//初始化記憶體,長用來初始化陣列
4. 無窮大
對於int型別的資料,如果我們想用乙個數來表示無窮大,使得它比輸入的所有的數都大,可以選擇0x3f3f3f3f或
0x7fffffff
0x3f3f3f3f 數值為 1061109567
0x7fffffff 數值為2139062143
負無窮大則可以用 -0x3f3f3f3f 或 -0x7fffffff
-0x3f3f3f3f 數值為-1061109567
-0x7fffffff 數值為-2139062143
在題目中常使用 0x3f3f3f3f,因為0x7fffffff 容易越界,定義全域性變數
const int inf = 0x3f3f3f3f;
5. memset()初始化
假設定義了以下陣列:
int a[10];
double b[10];
bool ok[10];
memset(a, -1, sizeof(a)); //正確,將int型a陣列元素初始化為 -1
memset(b, -1, sizeof(b)); //錯誤,不可以將double型的b陣列初始化為 -1
memset(ok, -1, sizeof(ok));//錯誤,不可以將bool型的ok陣列初始化為-1
memset(a, 0, sizeof(a)); //正確,將int型a陣列元素初始化為0
memset(b, 0, sizeof(b)); //正確,將double型b陣列初始化為 0
memset(ok, 0, sizeof(ok));//正確,將bool型的ok陣列初始化為0
memset(a, 1, sizeof(a));//錯誤,不可以將int型a陣列元素初始化為0
memset(b, 1, sizeof(b)); //錯誤,不可以將double型b陣列初始化為 0
memset(ok,1, sizeof(ok)); //正確,可以將bool型的ok陣列初始化為1
對於無窮大的初始化:
const int inf = 0x3f3f3f3f;
const int inf = 0x7fffffff;
memset(a, inf, sizeof(a));//正確
memset(a, inf, sieof(a)); //錯誤
對於int型陣列a可以用0x3f3f3f3f初始化,但不可以用0x7fffffff,如果非要把a陣列初始化為0x7ffffff,可以用語句 fill(a, a+n, inf); //n為元素個數
6. 隨機數
srand(time(0)); //根據系統時間設定隨機數種子
int i = rand() % n; //生成區間[0,n)的整數
7. 輸入輸出
(1) int,double型
int a;
double b;
輸入:cin>>a; 或 scanf("%d",&a);
cin>>b; 或 scanf("%lf",&b);
輸出:cout<
cout(2) char型
char ch;
輸入: cin>>ch; 或scanf("%c",&ch);
scanf("%c",&ch);
不常用,容易出錯,比如下面的例子:
cin>>ch;
coutcout《上面四句話,執行結果第二個cout輸出的不是我們原來輸入的字元,因為如果第一次輸入字元後,按了回車,那麼第二次輸入的就是回車,也就是scanf("%c",&ch);把回車吸收了。所以如果要正確使用,要在中間加上一句getchar();
cin>>ch;
coutscanf("%c",&ch);
cout《對於字元陣列 char chs[10];
輸入: cin>>chs; 或scanf("%s",chs);
注意:用字元陣列存放字串時,如果乙個字串中存在空格,cin>>chs;不可以存空格
gets(chs);可以存空格.
(3) string型
string str;
輸入:cin>>str; 或getline(cin,str);
前者不可以存放帶有空格的字串,後者可以。
(4) 混合型
110
輸入如上,每一行的三個數是連續的,要想分開存入矩陣中,讀入用scanf(「%1d」, &num);
12:08:30
輸入如上,假設這是乙個時間,那麼我們想要在輸入的時候就單獨獲取時分秒,可以用
scanf("%d:%d:%d",&h,&m,&s);
(6) 快速讀入(正負)
即輸入字元轉換成數字,效率高,在輸入資料量特別大的時候採用快速讀入可以避免超時.
inline int read()
char ch=getchar();int x=0,f=1;
while(ch>'9'||ch<'0')
while(ch<='9'&&ch>='0')
return x*f;
使用:int num;
num = read(); //輸入num
基礎演算法acm檢驗
昨天參加了一下校內acm隊選拔。第一次以考試競賽做演算法,緊張到連個陣列定義都快忘了,讀個題還讀了幾遍才反應過來。考完反省良多。順便考後總結了一下題目,其實整體還是算蠻簡單的,都是leetcode上的入門題,也是一些基礎題 本篇部落格主要是基於在去acm選拔前做心理準備時,發現搜不到判斷自己演算法水...
ACM基礎之排序演算法
在acm基礎知識中,排序是一種比較基礎但又比較重要的思想,熟練地掌握排序演算法十分有必要。排序的方法比較多,這裡重要介紹三種排序 選擇排序 插入排序 氣泡排序。一 選擇排序 1 基本思想 在要排序的一組數中,選出最小的數與第乙個數交換,然後再在剩下的數中選出最小的數與第二個數交換 直到第n 1個數與...
Go語言學習二 常數和條件語句
package main import fmt func main if else語句 if a 20else b 200 if語句巢狀 if a 100 switch case 語句,注意沒有break var grade string b var marks int 90 switch mark...