• 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;
    }
  • 相关阅读:
    Day1_Python基础
    选择排序(java版)
    冒泡排序(java版)
    手写数据库连接池(动态代理)
    JDBC增删查改(使用配置文件)
    JDBC demo
    JSP入门&会话技术
    response实现验证码图片
    android 定制自己的日志工具
    服务的最佳实践——后台执行的定时任务
  • 原文地址:https://www.cnblogs.com/renxin123/p/9135880.html
Copyright © 2020-2023  润新知