常用函數:
floor(a);//對a下取整
ceil(a);//對a上取整
log(a);/log2(a);/log10(a)//以e為底的對數
cout<<clock()/double CLOCKS_PER_SEC;//輸出程式運作時間
//clock函數傳回程序運作時間,但是這個運作時間機關不是秒,而是CPU運作的時鐘周期計數。
//需要除以CPU時鐘頻率,也就是CLOCKS_PER_SEC.以得到一個以秒為機關的數值
//需要頭檔案<ctime>
強制類型轉換:
L/l = (long long);
部分STL:
預設include< algorithm>
reverse(a+,a+n+);//翻轉一段序列的元素
//區間左閉右開
//時間複雜度:O(n)
int len=unique(a+,a+n+)-a-;//對一段區間的元素進行去重,去重後将重複元素放于序列末尾
//隻能去掉連續的重複元素,是以要先sort(...),複雜度O(n)
//傳回值為序列最後一項的後一項的下标的位址
swap(a,b)//交換a,b的值
int pos=lower_bound(a,a+n+,x)/upper_bound()-a;
//傳回區間内第一個大于等于/大于給定值的元素位址
關于char和stinrg
//适用于char數組
strlen(s);//用于char數組,需要include<cstring>
char a[];//注意都要開char數組,隻用于char數組
int pos=strstr(s,a)-s;//傳回a在s中第一次出現的位置(從零開始)指針
//資料範圍<=10^5速度快于KMP中next
char a[];
int ban=strcmp(s,a);//安裝Ascll從左向右比較
//若s=a,傳回0
//若s<a,傳回負數為-1
//若s>a,傳回正數為1
//适用于string
s.length()/s.size();//用于string,include<iostream>
char c;
s.push_back(c);//即s+c,注意c為char類型字元
s.empty(),s.clear(),s.erase(pos,len);//删除從pos處開始長度為len的子串
s.insert(pos,c);//在pos(從零開始)出插入字元或字元串c,注意c和s都必須為string類型
string c=s.substr(pos,len);//傳回從pos處開始長度為len的子串
stirng a;
int pos=s.find(a);//傳回a在s中第一次出現的位置,對是位置
//+,>,==,<等都可對string使用,但string實在太慢了!!乖乖getchar()後處理吧.
部分事項:
不介紹cout的格式化輸出….
格式化輸出請使用printf
不可重載int,char等基本類型的運算符。
異或^的優先級小于==
SPFA判負環:
if(!inq[x])
{
q.push(x);
inq[x]=;
cnt[x]=max(cnt[k]+,cnt[x]);
if(cnt[x]>=n+)
return;
}
資料生成:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
srand(time());
int n=rand()%100+;
printf("%d\n",n);
for(int i=;i<=n;i++)
{
int a=rand()%1000+;//-内的數
printf("%d ",a);
}
return ;
}
對拍:
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main()
{
int tot=;
while()
{
system("data.exe");
system("std.exe");
system("boli.exe");
if(system("fc std.out boli.out"))
{
printf("WA");
system("pause");
}
tot++;
printf("%d\n",tot);
}
return ;
}