zoukankan      html  css  js  c++  java
  • Codeforces Round #486 (Div. 3) C "Equal Sums" (map+pair<>)

    传送门

    •题意

    给k个数列,从中k个数列中找出任意2个数列 i ,j

    使得数列i删除第x个数,和数列j删除第y个数的和相等

    若存在,输出 i ,x 和 j,y 

    •思路

    每个数列之间的联系为数列的和之间的差det

    如果开二维数组记录每个数列之间的det的话,显然是不可行的_(:з」∠)_

    这里用map<x ,pair<i ,j > >mp表示序列 i 删除第 j 个数后的总和为 x;

    如果某两个序列各删除一个数,得到的总和相等,

    也就是后一个序列得到的总和已存在(被前一个所记录)的话,就找到了

    •代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 const int maxn=2e5+5;
     5 map<int,pair<int,int> > mp;
     6 int a[maxn];
     7 ll sum;
     8 int main()
     9 {
    10     int k;
    11     cin>>k;
    12     for(int i=1;i<=k;i++)
    13     {
    14         int n;
    15         cin>>n;
    16         sum=0;
    17         for(int j=1;j<=n;j++)
    18         {
    19             cin>>a[j];
    20             sum+=a[j];
    21         }
    22         for(int j=1;j<=n;j++)
    23         {
    24             int x=sum-a[j];
    25             if(mp.count(x)&&mp[x].first!=i)
    26             {
    27                 cout<<"YES"<<endl;
    28                 cout<<i<<' '<<j<<endl;
    29                 cout<<mp[x].first<<' '<<mp[x].second<<endl;
    30                 return 0;
    31             }
    32             mp[x]=make_pair(i,j);
    33         }
    34     }
    35     cout<<"NO"<<endl;
    36 }
    View Code
  • 相关阅读:
    回流与重绘
    事件循环的一些小啰嗦
    async与await的那些事儿
    数组去重的方法们
    Object的一些常用方法
    JS事件流的一些理解
    关于Ajax的那些记录
    call、bind与apply函数的区别
    继承的一些细碎记载
    计算机基础的小贴士(1)
  • 原文地址:https://www.cnblogs.com/MMMinoz/p/11228539.html
Copyright © 2011-2022 走看看