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;
}