1. 程式人生 > 其它 >Selenium Chrome版本與chromedriver相容版本對照表

Selenium Chrome版本與chromedriver相容版本對照表

貪心:貪婪演算法是一種演算法範例,它遵循在每個階段做出區域性最優選擇的啟發式求解方法,目的是尋找到一個全域性最優解。

用處:①活動安排    

    設有N個活動時間集合,每個活動都要使用同一個資源,比如說會議場,而且同一時間內只能有一個活動使用,每個活動都有一個使用活動的開始si和結束時間fi,即他的使用區間為(si,fi),現在要求你分配活動佔用時間表,即哪些活動佔用該會議室,哪些不佔用,使得他們不衝突,要求是儘可能多的使參加的活動最大化,即所佔時間區間最大化!

    具體思路如下:首先,我們需要將這些活動按照結束時間從小到大排序。然後每次選出一個活動,他的開始時間要大於上一個選擇的活動的結束時間,同時在剩餘的活動裡,他的結束時間是最早的。選擇的第一個活動就是結束時間最早的那個活動。

   ②線段覆蓋

  在一維空間中告訴你N條線段的起始座標與終止座標,要求求出這些線段一共覆蓋了多大的長度。

  具體思路如下:用起始點為順序進行排列,若初始與末尾結點均大於上個結點的末尾結點,則加上這一段的長度,若初始小於末尾則補上多餘的部分長度。

    ③數字組合問題

   設有N個正整數,現在需要你設計一個程式,使他們連線在一起成為最大的數字,例3個整數 12,456,342 很明顯是45634212為最大,4個整數 342,45,7,98顯然為98745342最大。

    具體思路如下:常規思路為字串比較大小後排序;若要用數值比較則要比較組合後的大小且用氣泡排序;

    ④···

   

例題1:

題目描述

​ 小偉報名參加中央電視臺的智力大沖浪節目。本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者元。接下來主持人宣佈了比賽規則:

​ 首先,比賽時間分為個時段,它又給出了很多小遊戲,每個小遊戲都必須在規定期限前完成。如果一個遊戲沒能在規定期限前完成,則要從獎勵費元中扣去一部分錢,為自然數,不同的遊戲扣去的錢是不一樣的。當然,每個遊戲本身都很簡單,保證每個參賽者都能在一個時段內完成,而且都必須從整時段開始。主持人只是想考考每個參賽者如何安排組織自己做遊戲的順序。作為參賽者,小偉很想贏得冠軍,當然更想贏取最多的錢!注意:比賽絕對不會讓參賽者賠錢!


輸入

​ 第一行為,表示一開始獎勵給每位參賽者的錢;

​ 第二行為,表示有個小遊戲;

​ 第三行有個數,分別表示遊戲到的規定完成期限;

​ 第四行有個數,分別表示遊戲到不能在規定期限前完成的扣款數。

輸出

​ 輸出小偉能贏取最多的錢。


樣例輸入

10000
7
4 2 4 3 1 4 6
70 60 50 40 30 20 10

樣例輸出

9950

優先保證完成獎勵多的任務,每個任務的時間互相不衝突,如果完成不了就把響應的錢數扣掉,

#include <iostream>
#include <algorithm>
using namespace std;
//每個任務的時間和金錢
struct task {
    int t, m;
};

bool cmp(task a, task b) {
    if (a.m == b.m) return a.t < b.t;
    return a.m > b.m;
}
//標記陣列標記時間
int n, m, mark[100000] = {1};
task game[505];

int main() {
    cin >> m >> n;
    for (int i = 0; i < n; i++) {
        cin >> game[i].t;
    }
    for (int i = 0; i < n; i++) {
        cin >> game[i].m;
    }
    sort(game, game + n, cmp);
    for (int i = 0; i < n; i++) {
        for (int j = game[i].t; j >= 0; j--) {
            //如果時間沒有被用過,則標記1
            if (mark[j] == 0) {
                mark[j] = 1;
                break;
            }
            //j為0,說明所有時間都被佔用,則扣除相應的錢數
            if (j == 0) {
                m -= game[i].m;
            }
        }
    }
    cout << m << endl;
    return 0;
}

例題2:刪數

題目描述

​ 輸入一個高精度的正整數n(長度不大於240位),去掉其中任意 s個數字後剩下的數字按原左右次序將組成一個新的正整數,現求一種方案,使得新的正整數數值最小。


輸入

​ 第一行一個整數n。

​ 第二行一個正整數s。

輸出

​ 輸出一個數表示最小值,輸出時忽略數字的前導零。


樣例輸入1

179566
4

樣例輸出1

15

樣例輸入2

903071
3

樣例輸出2

1
#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    string str;
    //用字串讀入
    cin >> str >> n;
    for (int i = n; i > 0; i--) {
        //刪除下標
        int ind = str.size() - 1;
        for (int j = 0; i < str.size() - 1; j++) {
            //找到最大數,結束內層迴圈
            if (str[j] > str[j + 1]) {
                ind = j;
                break;
            }
        }
        //進行刪除
        str.replace(ind, 1, "");
    }
    //解決前置0問題
    int f = 0;
    for (int i = 0; i < str.size(); i++) {
        if (str[i] != '0') f = 1;
        if (f == 1) cout << str[i];
    }
    return 0;
}

例題3:

問題:設有N個正整數,現在需要你設計一個程式,使他們連線在一起成為最大的數字。
例如3個整數 12,456,342 很明顯是45634212為最大。
例如4個整數 342,45,7,98 顯然為98745342最大。
例如3個整數 4671,467,3 顯然46734671最大,這裡有個陷阱,就是怎麼安排4671和467的位置順序。

程式要求:第一行輸入整數N,接下來一行輸入N個數字,最後一行輸出最大的那個數字!

題目解析:看起來好像是找哪個數字的開頭元素最大,然後按照大小順序連在一起就OK了,但實際上要麻煩一些,比如如果N太大,比較起來就很麻煩,而且如果遇到像第三個例子那樣的問題,你該怎麼處理呢?
有一個辦法是將數字轉化為字串,用strcmp比較a+b和b+a的大小,也就知道了誰應該排在前面。不過我這兒有一個更好的辦法來實現這個程式。我們從這N個數中任取兩個然後比較ab和ba的大小,如果ab>ba,那麼就將a排在b之前,最後按照排好的這組數按從大到小的順序輸出。

#include<iostream>  
#include<cmath>  
 
using namespace std;  
  
bool compare(int Num1,int Num2)          
{  
    int count1=0,count2=0;                  //分別記錄Num1和Num2是幾位數 
    int MidNum1 = Num1,MidNum2 = Num2;  
    while( MidNum1 )  
    {  
        ++count1;  
        MidNum1 /= 10;  
    }  
      
    while( MidNum2 )  
    {  
        ++count2;  
        MidNum2 /= 10;  
    }  
    //pow(x,n)的意思是x的n次方 
    int a = Num1 * pow(10,count2) + Num2;     //相當於把Num2接到了Num1後邊 
    int b = Num2 * pow(10,count1) + Num1;      //相當於把Num1接到了Num2後邊 
      
    return (a>b)? true:false;                  //如果a>b就返回true 
}
int main()  
{  
    int N;  
    cout<<"Please Enter The Number N: "<<endl;  
    cin>>N;  
    int *kk = new int [N];                  //動態分配一個數組 
    for(int i=0;i<N;i++)  
        cin>>kk[i];  
      
    int temp;  
    for(int i=0;i<N-1;i++)                //使用氣泡排序的模板 
        for(int j=0;j<N-i-1;j++)  
            if(compare(kk[j],kk[j+1]))  //此處稍微改造了一下 
            {  
                temp = kk[j];  
                kk[j] = kk[j+1];  
                kk[j+1] = temp;  
            }
      
    cout<<"The max number is:";  
    for(int i=N-1;i>=0;i--)  
        cout<<kk[i];  
    cout<<endl;  
    delete[]kk;                        //釋放陣列空間 
    
    return 0;  
}