51nodP1090 3個數和為0

2022-08-05 04:21:20 字數 916 閱讀 6492

51nodp1090 3個數和為0

1、首先我們處理出每兩個數的和,兩個數公升序排列,即強制第二個數大於第三個數,

然後我們按照 和 降序排列,這樣兩個數的和

的相反數 就可以作為第乙個數 ,因為降序 所以第乙個數的值一定是單調的,

2、然後我們就可以將前面處理出來的每個數的和列舉過去,看他的相反數是否出現過, 用 map 維護 

因為互不相同 這點很重要 否則我的方法就不行了 233,然後判斷一下這個第乙個數是否小於第二個數

小於則說明這種 方案是合法的,然後我們就可以直接輸出了,因為我們前面限制的條件,所以這樣一定是按

字典序從小到大輸出的

1 #include 2 #include 3 #include 4 #include 5 #include 

6 #include 7 #include 8 #include 9 #include 10

using

namespace

std ;

1112

struct

nodeb[1000011

];15

intn,cnt,ans ;

16int a[1011

] ;17 map mp ;

1819 inline bool

cmp(node u,node v)

2024

25int

main()

26 ;

34 sort(b+1,b+cnt+1

,cmp) ;

35for( int i=1;i<=cnt;i++)

3642}43

if(!ans) printf("

no solution\n

") ;

44return0;

45 }

51nod 1090 3個數和為0

1090 3個數和為0 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小...

51nod 1090 3個數和為0

1090 3個數和為0 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小...

51Nod 1090 3個數和為0

給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和等於0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。input 第1行,1個數n,n為陣列的長度 0 n 1...