三元组

也许更好的阅读体验
D e s c r i p t i o n \mathcal{Description} Description
给定 n , k n,k n,k,对于一 个三元组 ( a , b , c ) (a, b, c) (a,b,c),若合法则需要满足 1 ≤ a , b , c ≤ n 1 ≤ a, b, c ≤ n 1a,b,cn,且两两元素之和均为 k k k的倍数。
求不同的合法的三元组有多少个。
三元组的相应的任意一 位不同则认为他们不同。
S o l u t i o n \mathcal{Solution} Solution
a = x 1 k , b = x 2 k , c = x 3 k a=x_1k,b=x_2k,c=x_3k a=x1k,b=x2k,c=x3k
x 1 , x 2 , x 3 ∈ [ 0 , n / k ] x1,x2,x3\in [0,n/k] x1,x2,x3[0,n/k] (包括小数)
则有
a + b = ( x 1 + x 2 ) k a+b=(x_1+x_2)k a+b=(x1+x2)k
b + c = ( x 2 + x 3 ) k b+c=(x_2+x_3)k b+c=(x2+x3)k
a + c = ( x 1 + x 3 ) k a+c=(x_1+x_3)k a+c=(x1+x3)k

x 1 + x 2 ∈ Z x_1+x_2\in Z x1+x2Z
x 2 + x 3 ∈ Z x_2+x_3\in Z x2+x3Z
x 1 + x 3 ∈ Z x_1+x_3\in Z x1+x3Z
所以可以知道

  • x 1 , x 2 , x 3 ∈ Z x1,x2,x3\in Z x1,x2,x3Z
    x 1 , x 2 , x 3 x1,x2,x3 x1,x2,x3 n / k n/k n/k种选择
    • 当三个数字全部不相同 有 C n / k 3 C_{n/k}^3 Cn/k3种搭配,每种搭配有6种排列方式
    • 当三个数字有两个相同 有 C n / k 2 C_{n/k}^2 Cn/k2种搭配,每种搭配有6种排列方式
    • 当三个数字全部都相同 有 n / k n/k n/k种搭配,每种搭配有1种排列方式
  • x 1 , x 2 , x 3 ∉ Z x1,x2,x3∉ Z x1,x2,x3/Z
    ∵ x 1 , x 2 , x 3 \because x1,x2,x3 x1,x2,x3两两相加为整数
    ∴ x 1 , x 2 , x 3 = i k + k 2 , i ∈ Z ∴x1,x2,x3=ik+\frac{k}{2},i\in Z x1,x2,x3=ik+2k,iZ
    此时条件 k % 2 = = 0 k\%2==0 k%2==0
    x 1 , x 2 , x 3 x1,x2,x3 x1,x2,x3 n / k 2 − n / k n/\frac{k}{2}-n/k n/2kn/k种选择
    接下来的计算同上

代码

/*******************************
Author:Morning_Glory
LANG:C++
Created Time:2019年06月13日 星期四 08时19分25秒
*******************************/
#include <cstdio>
#include <fstream>
#define ll long long
using namespace std;
int n,k,tim,hal;
ll ans;
ll C3 (int n) { return 1ll*n*(n-1)/2*(n-2)/3; }
ll C2 (int n) { return 1ll*n*(n-1)/2; }
int main()
{
	scanf("%d%d",&n,&k);
	tim=n/k;
	if ((k-1)&1){
		hal=n/(k/2)-tim;
		ans+=6*C3(hal)+6*C2(hal)+hal;
	}
	ans+=6*C3(tim)+6*C2(tim)+tim;
	printf("%lld\n",ans);
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值