51nod 1267 4個數和為0(STL,二分)

2021-07-30 05:18:16 字數 637 閱讀 1946

解題方案:4個數a,b,c,d的和可以拆成(a+b)+(c+d)的和,即可以先預處理出所有可以湊成的2個數的和,然後在這所有的2個數的和裡面進行二分查詢0-(a+b)。因為題目沒有說n個數互不相同,所以二分找到以後還得check一下是否共用了某個數,如果共用了的話就得看這個數的個數是否夠用。複雜度o(1e6*log(le6))。

#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define for(i,k,n) for(int i=k;inum;

typedef map> > sum;

sum sum;

int main()

); }

}for(sum::iterator it=sum.begin();it!=sum.end();it++)

num[c]++; num[d]++;

}num[a]++; num[b]++;}}

}puts("no");

return 0;

}

51nod 1267 4個數和為0

思路 先n 2預處理出所有兩兩的組合,那麼就變成要找a b 0的問題了,那麼排序o n 去找就可以了 includeusing namespace std define ll long long const int maxn 1005 1005 struct node node maxn bool ...

51nod1267 4個數和為0

1267 4個數和為0 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 給出n個整數,你來判斷一下是否能夠選出4個數,他們的和為0,可以則輸出 yes 否則輸出 no input 第1行,1個數n,n為陣列的長度 4 n 1000 第2 n 1行 a i 10 9...

51 nod 1267 4個數和為0

給出n個整數,你來判斷一下是否能夠選出4個數,他們的和為0,可以則輸出 yes 否則輸出 no input 第1行,1個數n,n為陣列的長度 4 n 1000 第2 n 1行 a i 10 9 a i 10 9 output 如果可以選出4個數,使得他們的和為0,則輸出 yes 否則輸出 no sa...