新疆大学(新大)OJ xju 1010: 四个年级 C++ STL map 将4层循环优化成2层循环可解
1010: 四個年級
時間限制: 3 Sec 內存限制: 128 MB
題目描述
為了加強全體軟件學院的同學的較量,學院想讓ACM協會設計一次活動讓所以軟件學院的同學都加入,并且要實現高年級和低年級互動的效果。會長想了這樣一個活動(可能有點無聊),他寫了一個小程序,讓每個年級的同學都來隨機生成一個數字,如果有來著四個年級的四個同學他們手上的數字相加等于零,就稱這是一組超強組合。例如一年級的同學的數字為{-45,-41,-36,26,32,1},二年級的同學數字為{22,-27,53,30,-38,-54},三年級的同學數字為{42,56,-37,-75,-10,-6},四年級同學數字為{-16,30,77,-46,62,45}。則有6組超強組合(-45,-27,42,30),(26,30,-10,-46),(-32,22,56,-46),(-32,30,-75,77),(-32,-54,56,30)(1 -27 42 -16)。你的任務是給你所有年級人的數字,讓你計算有多少組超強組合。為了方便出來我們假設每個年級的人一樣多。
輸入
輸入包含多組數據,第一行為測試數據T組(1<=T<=10);以下每組數據第一行包含一個數字N(1<=N<=2000)表示每個年級人數。接下來數N行,每行有4個數A1,A2,A3,A4(-1000
#include <iostream> #include <map> using namespace std; typedef long long ll;int a[2010][4];int main() {int t,n;cin >> t;int k = 0;while(t--){cin >> n;for(int i = 0;i < n; i++){for(int j = 0;j < 4; j++){cin >> a[i][j];}}map <int,int> m1,m2;for(int i = 0;i < n; i++){for(int j = 0;j < n; j++){m1[a[i][0]+a[j][1]]++;m2[a[i][2]+a[j][3]]++;}}int ans = 0;map <int,int>::iterator it;for(it = m1.begin();it != m1.end(); it++){ans += it->second*m2[-it->first];}cout << "Case " << ++k << ": ";cout << ans << endl; }return 0; } // written by zhangjiuding總結
以上是生活随笔為你收集整理的新疆大学(新大)OJ xju 1010: 四个年级 C++ STL map 将4层循环优化成2层循环可解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【模板】第二类斯特林数Stirling
- 下一篇: 新疆大学OJ(ACM) 1047: st