51nodp1090 3個數和為0
1、首先我們處理出每兩個數的和,兩個數公升序排列,即強制第二個數大於第三個數,
然後我們按照 和 降序排列,這樣兩個數的和
的相反數 就可以作為第乙個數 ,因為降序 所以第乙個數的值一定是單調的,
2、然後我們就可以將前面處理出來的每個數的和列舉過去,看他的相反數是否出現過, 用 map 維護
因為互不相同 這點很重要 否則我的方法就不行了 233,然後判斷一下這個第乙個數是否小於第二個數
小於則說明這種 方案是合法的,然後我們就可以直接輸出了,因為我們前面限制的條件,所以這樣一定是按
字典序從小到大輸出的
1 #include 2 #include 3 #include 4 #include 5 #include6 #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...