首页 > 其他分享 >调色盘 (3维k点最小最远点对-容斥原理)

调色盘 (3维k点最小最远点对-容斥原理)

时间:2022-10-25 12:09:35浏览次数:54  
标签:MAXX 颜色 int 调色盘 d% 容斥 MAXN include 最远


调色盘(pastele)

题目描述

Albus得到了一份礼物:来自Polaris的水彩油墨包。

Polaris的油墨包里面有N个颜色,现在Albus打算选其中的K种来作一幅风景画。

既然是风景画,颜色就不能太突兀。因此Albus进行了如下的定义:

每个颜色由三个属性刻画:R[i],G[i],B[i]。

两个颜色的“距离”指它们三个属性的最大差值,也就是Max(|Ri-Rj|,|Gi-Gj|,|Bi-Bj|)。

而K个颜色的距离,指的是其中任意两个颜色的最大距离。

你的任务是求出可能的最小距离。

 

输入

第一行两个整数N和K。

接下来N行,每行三个整数R[i],G[i],B[i]。

输出

可能的最小距离。

 

样例输入

5 3

6 6 4

6 2 7

3 1 3

4 1 5

6 2 6

样例输出

2

解释

选1,4,5三个颜色。

数据范围

对于10%的数据,N<=10

对于50%的数据,0<=Ri,Gi,Bi<=20,2<=K<=N<=100

对于80%的数据,0<=Ri,Gi,Bi<=50,2<=K<=N<=10000

对于100%的数据,2<=K<=N<=100000,0<=Ri,Gi,Bi<=150


a[x][y][z]=c[x][y][z]+c[x-1][y-1][z]+c[x][y-1][z-1]+c[x-1][y][z-1]-c[x-1][y][z]-c[x][y-1][z]-c[x][y][z-1]-c[x-1][y-1][z-1];
c[x][y][z]=a[x][y][z]-(c[x-1][y-1][z]+c[x][y-1][z-1]+c[x-1][y][z-1]-c[x-1][y][z]-c[x][y-1][z]-c[x][y][z-1]-c[x-1][y-1][z-1]);


容斥原理


#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<functional>
#include<algorithm>
using namespace std;
#define MAXN (150+10)
#define MAXX (151)
int n,k,a[MAXN][MAXN][MAXN]={0},c[MAXN][MAXN][MAXN]={0};
int Node_count(int x,int y,int z,int l)
{
if (z-l<0||y-l<0||z-l<0) return 0;
return c[x][y][z]+c[x-l][y-l][z]+c[x][y-l][z-l]+c[x-l][y][z-l]-c[x-l][y][z]-c[x][y-l][z]-c[x][y][z-l]-c[x-l][y-l][z-l];

}
int main()
{
freopen("pastele.in","r",stdin);
freopen("pastele.out","w",stdout);

scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
a[x+1][y+1][z+1]++;
}


/*
a[x][y][z]=c[x][y][z]+c[x-1][y-1][z]+c[x][y-1][z-1]+c[x-1][y][z-1]-c[x-1][y][z]-c[x][y-1][z]-c[x][y][z-1]-c[x-1][y-1][z-1];
c[x][y][z]=a[x][y][z]-(c[x-1][y-1][z]+c[x][y-1][z-1]+c[x-1][y][z-1]-c[x-1][y][z]-c[x][y-1][z]-c[x][y][z-1]-c[x-1][y-1][z-1]);

*/

for (int x=1;x<=MAXX;x++)
for (int y=1;y<=MAXX;y++)
for (int z=1;z<=MAXX;z++)
c[x][y][z]=a[x][y][z]-(c[x-1][y-1][z]+c[x][y-1][z-1]+c[x-1][y][z-1]-c[x-1][y][z]-c[x][y-1][z]-c[x][y][z-1]-c[x-1][y-1][z-1]);

/*
for (int i=1;i<=10;i++)
for (int j=1;j<=10;j++)
for (int k=1;k<=10;k++)
if (c[i][j][k]) cout<<i<<' '<<j<<' '<<k<<' '<<c[i][j][k]<<endl;
cout<<Node_count(6,6,6,6);
*/

int ans=MAXX;//成立 区间 (0 ,MAXX]
for (int x=MAXX;x>=1;x--)
for (int y=MAXX;y>=1;y--)
for (int z=MAXX;z>=1;z--)
{
if (ans&&k<=Node_count(x,y,z,ans)) ans--;
}
cout<<ans<<endl;


// while (1);
return 0;
}




标签:MAXX,颜色,int,调色盘,d%,容斥,MAXN,include,最远
From: https://blog.51cto.com/u_15724837/5794392

相关文章

  • 容斥定理
    用来求解集合计数问题,求解多个集合并的数目,转化为求交,结果等于加上奇数集合交的数目,将去偶数集合交的数目经典题目求错位排列,反求不是错位排列的条件,在交集合的时候可以合......
  • luogu P5339 [TJOI2019]唱、跳、rap和篮球 (容斥,指数型母函数,NTT)
    https://www.luogu.com.cn/problem/P5339要求不含1234的方案,反过来求含至少一个1234的方案。钦定存在i个位置有1234,位置的方案是Cn-3i,i.其他n-4i个位置的方案是多重集......
  • Luogu2167 Bill的挑战 - 容斥 - dp -
    题目链接:https://www.luogu.com.cn/problem/P2167题解:摘录一段描述容斥题目的话:本题中,关于容斥系数,可以先感性理解一下,严格证明可以用即除了自身,自身的超集都计算......
  • AcWing算法提高课 容斥原理
    容斥原理的复杂度是2^n,一般n不会很大形如:  由于容斥原理一共有2^n中选法,可以用二进制枚举,1表示选择某个条件。然后将偶数个1的状态加起来,奇数个1的状态减去例题:ht......
  • 算法学习笔记(数学):数论分块 + 容斥原理 + 莫比乌斯函数
    算法学习笔记(数学):数论分块+容斥原理+莫比乌斯函数这篇文章主要是要讲一道题目(链接在这里)以及梳理一下数论分块,莫比乌斯函数,容斥原理这些知识。先介绍下知识点吧qwq......
  • 容斥与反演技巧(一)
    二项式反演我们直接上式子好了一般有两种形式,第一种是\[f(n)=\sum_{i=0}^n\binom{n}{i}g(i)\iffg(n)=\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f(i)\]第二种是\[f(n)=\sum......
  • 容斥
    NC15079 大水题模板题#include<bits/stdc++.h>#defineLLlonglongusingnamespacestd;LLa[5]={0,2,5,11,13};intmain(){LLn;while(scanf("%lld"......
  • 【瞎口胡】Min-Max 容斥
    Min-Max容斥是通过容斥集合的最小值来得到集合最大值的一种方法。结合期望的线性性,我们得以计算几个随机变量最值的期望,它往往不和这些变量期望的最值相等。Min-Max容斥......
  • 【瞎口胡】多步容斥和二项式反演
    多步容斥多步容斥是指,对于\(n\)个集合\(A_1,A_2,\cdots,A_n\),有\[|A_1\cupA_2\cdots\cupA_n|=\sum\limits_{1\leqi\leqn}|A_i|-\sum\limits_{1\leqi<......
  • 16.看得最远的地方
    你是第一个发现我越面无表情越是心里难过所以当我不肯落泪地颤抖你会心疼地抱我在胸口你比谁都还了解我内心的渴望比表面来得多所以当我跌断翅膀的时候你不扶我但......