• cf 988div3 C.Equal Sums


    题目链接如下:

    http://codeforces.com/contest/988/problem/C

    题目大意是给你k个序列,你从中找出两个序列,使得这两个序列各自去掉一个数字以后的和相等。

    学到了map的操作,每一次输入时计算sum,接着遍历所有的sum-a[i]的情况,如果这个数值出现过,就不用再进行后面的判断了,直接继续输入就好。注意分析题目,所有的n相加不超过2*10^5,所以复杂度不会T。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    map<int,map<int,int> > p;
    map<int,int> vis;
    #define N 200005
    int main()
    {
        int k,a[N],flag=0,ans11,ans12,ans21,ans22;
        cin>>k;
        vis.clear();
        for(int i=0;i<k;i++)
        {
            int n,sum=0;
            cin>>n;
            for(int j=0;j<n;j++)
            {
                cin>>a[j];
                sum+=a[j];
            }
            if(flag) continue;
            for(int j=0;j<n;j++)
            {
                int tmp=sum-a[j];
                if(vis[tmp]==0||p[tmp][1]==i)
                {
                    vis[tmp]=1;
                    p[tmp][1]=i;
                    p[tmp][2]=j;
                }
                else
                {
                    flag=1;
                    ans11=p[tmp][1];
                    ans12=p[tmp][2];
                    ans21=i;
                    ans22=j;
                }
    
            }
            }
    if(flag==0)
    printf("NO
    ");
    else
        {
        printf("YES
    ");
        printf("%d %d
    ",ans11+1,ans12+1);
        printf("%d %d
    ",ans21+1,ans22+1);
        }
    
        return 0;
    }
  • 相关阅读:
    如何拍摄高质量数码照片
    背单词的捷径
    深职院校园的凤凰花
    MD5加密
    如何去遍历对象中的所有的属性值
    写给Vera
    トレーニングと自然(練習文)
    071203plan
    生日快乐!!!
    20071127不知阴晴
  • 原文地址:https://www.cnblogs.com/renxin123/p/9135880.html
Copyright © 2020-2023  润新知