時間限制: 1 sec 記憶體限制: 128 mb
提交: 88 解決: 33
有兩個長度都為n的序列a和b,在a和b中各取乙個數相加可以得到n2個和,求這n2個和中最小的n個。
第一行乙個正整數n(1 <= n <= 100000)。第二行n個整數ai,滿足ai <= ai+1且ai <= 109
第三行n個整數bi,滿足bi <= bi+1且bi <= 109
輸出僅有一行,包含n個整數,從小到大輸出這n個最小的和,相鄰數字之間用空格隔開。
32 6 6
1 4 8
3 6 7建議用最小堆實現。
這題。。。還是要用堆實現,這個演算法。。。我是木有想到的= = 借鑑大神的**思想,思想描述如下
因為兩個陣列都是有序遞增,所以先建立堆結構(大端堆),將其中乙個陣列a的第乙個元素與另乙個陣列b的所有元素相加的結果依次放入,然後再從a的第二個元素開始,依次與b中所有元素相加,相加結果與堆中根結點比較,如果比堆的根結點小,刪除根結點,將此結果加入,如果比根結點大,那麼跳出此次迴圈,訪問a的下乙個元素。
此時堆為大端堆,用陣列將其倒置後輸出即可。 學到了~~( •́ .̫ •̀ )
#include #include using namespace std;
const int maxn=100010;
int a[maxn],b[maxn],ans[maxn],n;
priority_queueq;
int main()
for(int i=1;i<=n;++i)
for(int i=2;i<=n;++i)
for(int i=0;iprintf("\n");
} return 0;
}
3555 Problem B 序列合併
時間限制 1 sec 記憶體限制 128 mb 提交 315 解決 97 提交 狀態 討論版 命題人 外部匯入 有兩個長度都為n的序列a和b,在a和b中各取乙個數相加可以得到n2個和,求這n2個和中最小的n個。第一行乙個正整數n 1 n 100000 第二行n個整數ai,滿足ai ai 1且ai 1...
Problem B 輸出連續的整數序列 之二
實驗5 problem b 輸出連續的整數序列 之二 description 輸出若干個連續的整數序列。input 輸入有多行。第一行是n 0,表示後面有n行輸入。之後每行輸入包含2個資料p和q,兩者之間用空格隔開,且均在int型別的表示範圍內。output 輸出n個連續的整數序列,序列兩兩之間用乙...
12 1 3 2 組合序列表示式
12.1.3.2 組合序列表示式 在 c 中,yield return 關鍵字只能返回乙個元素,因此,如果我們要在 c 中,使用迭代器實現的方法中,產生整個序列,那麼,就必須使用 foreach 迴圈,遍歷序列中所有元素,逐個產生元素。這也能執行,但效率低下,特別是,如果用這種方式處理幾個巢狀的序列...