You are given ni.
You have to choose exactly two sequences nj−1).
Note that it's required to remove exactly one element in each of the two chosen sequences.
Assume that the sum of the empty (of the length equals 0.
The first line contains an integer 2≤k≤2⋅105) — the number of sequences.
Then k pairs of lines follow, each pair containing a sequence.
The first line in the ai,1,ai,2,…,ai,ni.
The elements of sequences are integer numbers from 104.
The sum of lengths of all given sequences don't exceed n1+n2+⋯+nk≤2⋅105.
If it is impossible to choose two sequences such that they satisfy given conditions, print "NO" (without quotes). Otherwise in the first line print "YES" (without quotes), in the second line — two integers y.
Two chosen sequences must be distinct, i.e. i≠j. You can print them in any order.
If there are multiple possible answers, print any of them.
2
5
2 3 1 3 2
6
1 1 2 2 2 1
YES
2 6
1 2
3
1
5
5
1 1 1 1 1
2
2 3
NO
4
6
2 2 2 2 2 2
5
2 2 2 2 2
3
2 2 2
5
2 2 2 2 2
YES
2 2
4 1
In the first example there are two sequences [2,1,3,2]
8, i.e. the sums are equal.
题意: 给你k个数列(2<=k<=2*10^5),每个数列长度是n(n<=2*10^5),所有序列的总长度小于等于2*10^5,问是否有两个序列去掉序列其中一个值后两个序列序列和相等
用一个map存下每个序列去掉其中一个值后的剩余值及其的位置
然后遍历每个序列,看有没有一个序列去掉一个值后的剩余值被map记录,若有则输出这个值的位置及遍历到的值的位置,没有输出NO
#include <map> #include <set> #include <cmath> #include <queue> #include <cstdio> #include <vector> #include <string> #include <cstring> #include <iostream> #include <algorithm> #define debug(a) cout << #a << " " << a << endl using namespace std; const int maxn = 1e6 + 10; const int mod = 1e9 + 7; typedef long long ll; ll a[maxn]; int main(){ std::ios::sync_with_stdio(false); ll T; while( cin >> T ) { ll flag = false; map< ll, pair< ll, ll > > mm; for( ll i = 1; i <= T; i ++ ) { ll n, sum = 0, t; cin >> n; for( ll j = 1; j <= n; j ++ ) { cin >> a[j]; sum += a[j]; } for( ll j = 1; j <= n; j ++ ) { t = sum - a[j]; if( mm.count(t) && !flag && mm[t].first != i ) { cout << "YES" << endl; cout << i << " " << j << endl; cout << mm[t].first << " " << mm[t].second << endl; flag = true; } mm[t] = make_pair( i, j ); } } if( !flag ) { cout << "NO" << endl; } } return 0; }