• 洛谷P3799 妖梦拼木棒


    题目背景

    上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来。

    题目描述

    有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法?

    输入输出格式

    输入格式:

     

    第一行一个整数n

    第二行n个整数,a1,a2,……an(0<ai<=5000),代表每根木棒的长度。

     

    输出格式:

     

    一行一个整数,对1e9+7取模

     

    输入输出样例

    输入样例#1:
    4 1 1 2 2
    输出样例#1:
    1

    说明

    对于30%的数据 N<=5000

    对于100%的数据 N<=100000

    by-szc

    题解:枚举+桶+组合数

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    const int mod=1e9+7;
    using namespace std;
    int ans,n,x,mx,sum[100009];
    int c(int x){
        return (1LL*x*(x-1)/2)%mod;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&x);mx=max(mx,x);sum[x]++;
        }
        for(int i=1;i<=mx;i++){
            for(int j=i;j<=mx;j++){
                if(i+j>mx)break;
                if(i!=j&&sum[i]&&sum[j]&&sum[i+j]>=2)
                ans=(ans%mod+1LL*sum[i]*sum[j]*c(sum[i+j])%mod)%mod;
                else if(i==j)
                ans=(ans%mod+1LL*c(sum[i])*c(sum[i+j])%mod)%mod;
            }
        }
        cout<<ans%mod<<endl;
        return 0;
    }
  • 相关阅读:
    Graphviz安装配置
    固定ip
    机器学习基础
    研究生入学感悟
    复试临时练习
    复试临时练习
    Dev-C++回文数遇到的小麻烦
    单例模式
    工厂方法模式
    Spark的checkpoint详解
  • 原文地址:https://www.cnblogs.com/zzyh/p/7658364.html
Copyright © 2020-2023  润新知