天天看點

STL及各種技巧

常用函數:

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 ;
}