30 序列構造

2021-08-02 17:56:13 字數 1686 閱讀 5545

給定兩個長度為 n 的正整數序列 a=

[a1,

a2,…

,an]

和 b=

[b1,

b2,…

,bn]

,現在你選擇 k 個數構成序列 p=

[p1,

p2,…

,pk]

使得:序列 p 中的元素是不重複的1≤

pi≤n

,其中1≤i

≤k2×

(ap1

+⋯+a

pk)

大於序列 a 所有元素的和2×

(bp1

+⋯+b

pk)

大於序列 b 所有元素的和

k 小於等於 ⌊n

2⌋+1

現在請你找出乙個滿足上述條件的序列 p。

輸入

輸入第一行包含乙個整數 n (1≤

n≤106

),表示序列 a 和 b 中元素的個數;

輸入第二行包含 n 個用空格分隔的整數 a1

,…,a

n (1

≤ai≤

109),表示序列 a 中的元素;

輸入第三行包含 n 個用空格分隔的整數 b1

,…,b

n (1

≤bi≤

109),表示序列 b 中的元素。

輸出

輸出第一行為乙個整數 k,表示找到的序列 p 中元素的個數;

輸入第二行包含 k 個用空格分隔的整數 p1

,…,p

k (1

≤pi≤

n

),表示 p 中的不重複元素,p 中的元素可按任意順序輸出。

注意:答案可能有多個解,輸出其中任意一組即可,此題開通 special judge。

測試輸入

期待的輸出

時間限制

記憶體限制

額外程序

測試用例 1

以文字方式顯示

5↵8 7 4 8 3↵

4 2 5 3 7↵

以文字方式顯示

3↵1 4 5↵

1秒64m0

//參考討論區里大佬的思路,選擇元素之和的兩倍大於所有元素之和,等價於選擇元素之和大於剩下的元素

//先對a從大到小排序,這樣兩兩一組看的話,不管怎麼樣a都是滿足題意的

//則接下來只要對b兩兩一組選大即可

#include#includetypedef struct node

num;

num num[1000005];

int cmp(const void*a, const void*b)

int main()

for (int i = 0; i < count; i++)

scanf("%d", &num[i].num_b);

qsort(num, count, sizeof(num[0]), cmp);

count = count / 2 + 1;

printf("%d\n%d", count, num[0].index);

for (int i = 1,j=1; j < count; i++,j++)

printf("\n");

return 0;

}

192220序列型別

序列表示索引未非負整數的有序物件集合,包括字串,列表,元祖。說明 舉例 元祖跟裡面的逗號相關 mytuple a b c d type mytuple 列表根中括號相關 mylist a b c d type mylist 字串跟雙引號有關 mystr a,b,c,d type mystr 適用於所...

38 序列解包

序列解包可以用於元組 列表 字典。序列解包可以讓我們方便的對多個變數賦值。1 也就是以下 效果 類似。in 35 a,b c,d 1,2 3,4 in 36 aout 36 1in 37 bout 37 2in 38 cout 38 3in 39 dout 39 4序列解包用於字典時,預設是對 鍵 ...

444 序列重建

題目描述 驗證原始的序列 org 是否可以從序列集 seqs 中唯一地重建。序列 org 是 1 到 n 整數的排列,其中 1 n 104。重建是指在序列集 seqs 中構建最短的公共超序列。即使得所有 seqs 中的序列都是該最短序列的子串行 確定是否只可以從 seqs 重建唯一的序列,且該序列就...