CodeForces - 988C(STL大法好)

请你找出两个编号不一样的数列,并从这两个数列中各刚好删除一个数,使得这两个数列的和相等。c++

用vector存每个数spa

用map标记code

便可blog

#include <bits/stdc++.h>
using namespace std; const int maxn = 200005, INF = 0x7fffffff; typedef long long LL; vector<LL> G[maxn]; //存储每一行的全部元素
map<LL, int> vis;   //标记去掉某一个元素的sum是否出现
map<LL, int> x;     //标记行
map<LL, int> y;     //标记列

int main() { int k, flag = 0; cin>> k; for(int i=0; i<k; i++) { int n, num; LL sum = 0; cin>> n; for(int j=0; j<n; j++) { cin>> num; sum += num; G[i].push_back(num); } if(!flag) for(int j=0; j<n; j++) { LL temp = sum - G[i][j]; if(vis[temp]) if(x[temp] == i+1) continue; else { cout<< "YES" <<endl; cout<< x[temp] << " " << y[temp] <<endl; cout<< i+1 << " " << j+1 <<endl; flag = 1; break; } else { vis[temp] = 1; x[temp] = i+1; y[temp] = j+1; } } } if(!flag) cout<< "NO" <<endl; return 0; }
相关文章
相关标签/搜索