解題方案: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...