Codeforces Round #486 (Div. 3) C. Equal Sums map
阿新 • • 發佈:2018-12-31
C. Equal Sums
題目連結:
傳送門
題意:
給出很多序列,求其中兩個序列分別刪除一個元素後和相等的兩個序列。
思路:
求出每個序列的和,然後將每個序列去除其中一個元素的和存到一個map中,然後遍歷每個元素在map中找除了與他同行相同的序列之和即可。
程式碼如下:
#include <bits/stdc++.h> using namespace std; const int maxn=2*1e5+5; int n; vector<int>v[maxn]; int sum[maxn]; map<int,pair<int,int> >ma; int main() { memset (sum,0,sizeof(sum)); int k; scanf("%d",&k); for (int i=1;i<=k;i++) { int m; scanf("%d",&m); for (int j=0;j<m;j++) { int x; scanf("%d",&x); v[i].push_back(x); sum[i]+=x; } for (int j=0;j<m;j++) { int x=sum[i]-v[i][j]; ma[x]={i,j+1}; } } int ans1,x,ans2,y; for (int i=1;i<=k;i++) { int Size=v[i].size(); for (int j=0;j<Size;j++) { int x=sum[i]-v[i][j]; if(ma[x].first!=i) { printf("YES\n"); printf("%d %d\n%d %d\n",i,j+1,ma[x].first,ma[x].second); return 0; } } } printf("NO\n"); return 0; }