请你找出两个编号不同的数列,并从这两个数列中各恰好删除一个数,使得这两个数列的和相等。
用vector存每一个数
用map标记
即可
#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; }