CodeForces - 988C(STL大法好)

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

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

 

posted @ 2018-08-24 16:05  WTSRUVF  阅读(377)  评论(0编辑  收藏  举报