• C. Going Home


    根据题意,任意一对(i,j)  i<j 都有唯一对应的结果。

    那么两结果之间不同,则两对(i,j)不同。

    因为N2e5,1a[i]2.5e6

    则结果最多有5e6-1种

    则当我们枚举 (i,j) 达到5e6-1个,所有结果必定都枚举过了。

    所以第5e6次必定出现不同的 (i,j) 对应相同的结果。

    考虑我们这样枚举会出现(i,j) (i,k)的情况。

    所以稍微改变一下。

    先选出任意一对 (i,j) ,若C(n-2,2)的结果都不相同的的话,则最多5e6-2种

    所以当(n2)(n3)/2 ≥ 5e6-2 后,必定不能使结果不同。

    综上,时间复杂度为O(min(√5e6,n^2)),完全ok。

    #include<bits/stdc++.h>
    #define inf 0x3f3f3f3f
    #define MAX 1000001
    #define inf 0x3f3f3f3f
    #define FR(a,b,c) for(int a=b;a<=c;++a)
    #define ll long long
    const ll N = 2e5+7;
    const ll M = 5e6+7;
    const ll mod = 1e9+7;
    using namespace std;
    int a[N];
    struct{
        int a,b;
    }q[M];
    int main(){
        int n;scanf("%d",&n);
        for(int i=1;i<=n;++i)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;++i){
            for(int j=i+1;j<=n;++j){
                int res=a[i]+a[j];
                if(q[res].a==0){
                    q[res].a=i;
                    q[res].b=j;
                }
                else{
                    if(i!=q[res].a&&j!=q[res].b&&i!=q[res].b&&j!=q[res].a){
                        printf("YES
    ");
                        printf("%d %d %d %d
    ",i,j,q[res].a,q[res].b);
                        return 0;
                    }
                }
            }
        }
        printf("NO
    ");
        return 0;
    }
  • 相关阅读:
    ajax同步和异步
    vue组件
    type of的返回值有哪些
    git配置
    vue 获取时间戳对象转换为日期格式
    JavaScript运行机制
    单页面开发首屏加载慢,白屏如何解决
    单页面和多页面开发的优缺点
    【安全测试】sql注入
    【Python学习一】使用Python+selenium实现第一个自动化测试脚本
  • 原文地址:https://www.cnblogs.com/PdrEam/p/14538007.html
Copyright © 2020-2023  润新知