首页 > 其他分享 >P3799 妖梦拼木棒

P3799 妖梦拼木棒

时间:2024-02-16 09:33:27浏览次数:25  
标签:cnt 妖梦 min 木棒 max int P3799 mod

欲由4根木棒组成一个正三角形,则必有2根长度相等,且另外2根长度之和,等于前2根相等的木棒的长度。

#include <cstdio>
#include <algorithm>

using LL = long long;

const int N = 1e5 + 5, mod = 1e9 + 7;

int n, a[N], cnt[N];

int main()
{
	scanf("%d", &n);
	int min = 1e9, max = -1e9;
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
		cnt[a[i]]++;
		min = std::min(min, a[i]);
		max = std::max(max, a[i]);
	}
	
	LL ans = 0;
	for (int i = min; i <= max; i++) {
		if (cnt[i] >= 2) {
		    LL times = cnt[i] * (cnt[i] - 1) / 2 % mod;
			for (int j = min; j <= i / 2; j++) {
				if (j != i - j && cnt[j] >= 1 && cnt[i - j] >= 1) ans += times * cnt[j] * cnt[i - j] % mod;
				else if (j == i - j && cnt[j] >= 2) ans += times * (cnt[j] * (cnt[j] - 1) / 2) % mod;
			}
		}
	}
	printf("%lld", ans%mod);
	return 0;
}

标签:cnt,妖梦,min,木棒,max,int,P3799,mod
From: https://www.cnblogs.com/pangyou3s/p/18016911

相关文章

  • 洛谷题单指南-暴力枚举-P3799 妖梦拼木棒
    原题链接:https://www.luogu.com.cn/problem/P3799题意解读:要选四根木棒拼成等边三角形,必然有两根长度相等,其余两根长度之和等于前两根解题思路:木棒总数最大100000,每根最长5000,因此通过枚举其中两根木棒的长度,计算出另外两根的长度,通过各个长度的木棒数进行选择。设数组h[n]保......
  • P3799 妖梦拼木棒(组合数学)
    P3799妖梦拼木棒又是一道要靠题解的思路的题。(难受)。解题思路首先,由于数据大小在5*1e3以内,数据量在1e5以内。所以用桶排记录无疑是最合适的。(记录下数据的最大值和最小值可以提高运行效率)由题目分析,4个木棒中分三份(每份不为0)必然为1,1,2.其次,我们用循环i遍历数组b[],取b[i]为......
  • AcWing 167. 木棒 (剪枝非常多的一道搜索题
    package算法提高课;importjava.util.Arrays;importjava.util.Scanner;publicclassacw167{staticint[]w;staticboolean[]st;staticintsum,len,n;/***本题剪枝比较多光介绍一下,本代码注释光介绍一下剪枝的大概思路,如果有遗忘或......
  • 木棒
    #include<iostream>#include<string.h>#include<algorithm>usingnamespacestd;constintN=70;intn;intw[N];intsum;boolst[N];intlen;//dfs蹦着跳着......
  • C++算法之旅、02 从木棒切割问题领悟二分法精髓
    172、木棒切割问题https://sunnywhy.com/problem/172题目描述给出n根木棒的长度,现在希望通过切割它们来得到至少k段长度相等的木棒(长度必须是整数),问这些长度相等的木......
  • 木棒
    https://www.acwing.com/problem/content/169/#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;constintN=70;intn;intw[......
  • [AcWing 167] 木棒
    DFS剪枝点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1e6+10;intn;intw[N];intsum,len;boolst......