計蒜客_新報數(shù)游戲

Time 2000ms RAM 32767K

題面:

蒜頭君在和他的朋友們一起玩一個游戲晚缩。由于蒜頭君的機智,這個 游戲由蒜頭君擔(dān)任裁判甘磨。

首先橡羞,蒜頭君會給他們一人一個編號,并且每個人的編號都不相同济舆。接下來的每一回合,蒜頭君會給一個數(shù)莺债,編號不超過它的最大編號的人要報出自己的編號滋觉。如果沒有人的編號比蒜頭君給出的數(shù)要小,那么編號最小的人要報出自己的編號齐邦。每個人可以重復(fù)報號椎侠。

蒜頭君會按照一個列表順次報出每個回合的數(shù),他的朋友們想知道每回合報出的編號應(yīng)該是多少措拇。你能幫幫他們嗎我纪?

輸入格式

輸入數(shù)據(jù)共 3 行。第一行有兩個整數(shù) n,m (1≤ n ≤ 10^5,1 ≤ m ≤ 10^5),分別表示參與游戲的蒜頭君朋友的個數(shù)浅悉,和游戲的回合數(shù)趟据。

第二行 n個整數(shù)ai(1 ≤ ai ≤ 10^8),表示朋友們每個人的編號术健。

第三行 m 個整數(shù)qi(1 ≤ qi ≤ 10^8)汹碱,表示每回合蒜頭君給的數(shù)字。

輸出格式
輸出共一行荞估,輸出 m個整數(shù)咳促,表示每回合報出的編號。每兩個整數(shù)之間有一個空格勘伺,最后一個整數(shù)后面沒有空格跪腹。

樣例輸入
5 5 1 5 10 15 20 3 6 12 18 24

樣例輸出
1 5 10 15 20


思路:

將輸入分別儲存為 編號數(shù)組報數(shù)數(shù)組 ,為了提高查找效率飞醉,先將編號數(shù)組排序尺迂,然后用二分查找算法在已排序的數(shù)組中找數(shù)。


分析:

  • 由于輸入的數(shù)組長度不確定冒掌,相比于開創(chuàng)一個巨大的數(shù)組噪裕,更好的選擇是使用vector容器儲存數(shù)據(jù);
  • 排序算法可以自己實現(xiàn)一種算法(如冒泡法股毫,歸并法)膳音,也可以使用qsort或者std::sort實現(xiàn);
  • 查找算法我們選擇二分查找法铃诬。

實現(xiàn)(C++):

#include<iostream>
#include<vector>
#include<algorithm>
using std::cout;
using std::cin;
using std::endl;
using std::sort;
using std::vector;

int binsearch(vector<int>&a, int lef, int rig, int e) {
    while (lef <= rig) {
        int mid = (lef + rig) >> 1;
        if(a[mid] > e) rig = mid - 1;
        else lef = mid + 1;
    }
    if(rig<0)rig=0;
    return rig;
}

int main() {
    //n:參與人數(shù)祭陷,m:游戲回合數(shù)
    int n,m;
    cin >> n >> m;
    vector<int>array1;
    vector<int>array2;
    //輸入
    int input;  
    for(int i=0;i<n;i++) {
        cin >> input;
        array1.push_back(input);
    }
    for(int i=0;i<m;i++) {
        cin >> input;
        array2.push_back(input);
    }
    //排序
    sort(
        &array1[0],
        &array1[n]        
    );
    
    //二分法查找
    int output;
    for(int i=0;i<m;i++) {
        output = binsearch(array1,0,n-1,array2[i]);
        if(i==m-1) {
            cout << array1[output] <<endl;
        } 
        else {
            cout << array1[output] <<" ";
        }
    }
    return 0;
}

Note:

  • 第一次提交的時候幾乎全錯了。情形如下:
    出現(xiàn)了編號數(shù)組中未出現(xiàn)的0趣席,于是在rig返回前插入輸出兵志,發(fā)現(xiàn)rig = -1于是在return rig;前加入判斷宣肚,完成想罕。
terminal
  • 第二次提交時前五個正確,后五個超時了霉涨。原因是原先binsearch()函數(shù)使用的是vector<int>a形參按价,形實結(jié)合時是值傳遞,導(dǎo)致額外的一次拷貝操作笙瑟,帶來的時間開銷非常大楼镐。改成引用作為形參:vector<int>&a,完成往枷。另外框产,使用vector前凄杯,
#include<vector>
using std::vector;
  • vector中填充數(shù)據(jù),比較好的做法是:
int input;  
    for(int i=0;i<n;i++) {
        cin >> input;
        array1.push_back(input);
    }

而不是:

    for(int i=0;i<n;i++) {
        cin >> array[i];
    }

因為后者存在著數(shù)組越界的隱患秉宿。

  • std::sort的使用:
#include<algorithm>
using std::sort;
...
//舉例1
vector<int> a = { 2, 4, 5, 3, 1 };
sort(
    begin(a),
    end(a),
    [](int x, int y){ return x >= y; }
    );
//舉例2
vector<int>b;
cin << n;
int input;  
    for(int i=0;i<n;i++) {
        cin >> input;
        b.push_back(input);
    }
sort(
    &b[0],
    &b[n],
    [](int x, int y){ return x < y; }
    );
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戒突,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蘸鲸,更是在濱河造成了極大的恐慌妖谴,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酌摇,死亡現(xiàn)場離奇詭異膝舅,居然都是意外死亡,警方通過查閱死者的電腦和手機窑多,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門仍稀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人埂息,你說我怎么就攤上這事技潘。” “怎么了千康?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵享幽,是天一觀的道長。 經(jīng)常有香客問我拾弃,道長值桩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任豪椿,我火速辦了婚禮奔坟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搭盾。我一直安慰自己咳秉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布鸯隅。 她就那樣靜靜地躺著澜建,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滋迈。 梳的紋絲不亂的頭發(fā)上霎奢,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音饼灿,去河邊找鬼。 笑死帝美,一個胖子當(dāng)著我的面吹牛碍彭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼庇忌,長吁一口氣:“原來是場噩夢啊……” “哼舞箍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皆疹,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤疏橄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后略就,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捎迫,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年表牢,在試婚紗的時候發(fā)現(xiàn)自己被綠了窄绒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡崔兴,死狀恐怖彰导,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敲茄,我是刑警寧澤位谋,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站堰燎,受9級特大地震影響掏父,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爽待,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一损同、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸟款,春花似錦膏燃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至处渣,卻和暖如春伶贰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背罐栈。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工黍衙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荠诬。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓琅翻,卻偏偏與公主長得像位仁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子方椎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗聂抢。 張土汪:刷leetcod...
    土汪閱讀 12,744評論 0 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法棠众,內(nèi)部類的語法琳疏,繼承相關(guān)的語法,異常的語法闸拿,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • 【程序1】 題目:古典問題:有一對兔子空盼,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,134評論 0 41
  • 樹形動態(tài)規(guī)劃胸墙,顧名思義就是樹+DP我注,先分別回顧一下基本內(nèi)容吧:動態(tài)規(guī)劃:問題可以分解成若干相互聯(lián)系的階段,在每一個...
    Mr_chong閱讀 1,486評論 0 2
  • 已經(jīng)好久沒有靜下心來看書了總是有這樣或者那樣的事分散注意力迟隅。突然間就想起去年的這個時候但骨,那個時候還在準(zhǔn)備考研的事,...
    真真卒跡閱讀 360評論 1 0