首页 > 其他分享 >CF1735D Meta-set 题解

CF1735D Meta-set 题解

时间:2024-02-08 20:01:40浏览次数:29  
标签:set int 题解 卡牌 long leq CF1735D Meta define

题目大意

给定 \(n\) 张卡牌,每张卡牌有 \(k\) 个属性,第 \(i\) 张卡牌的第 \(j\) 个属性为 \(c_{i,j}\)。

一个由 \(3\) 张卡牌 \(x,y,z\) 组成的集合被称作好的,当且仅当对于 \(1 \leq i \leq k\) 均有 \(c_{x,i}=c_{y,i}=c_{z,i}\) 或者 \(c_{x,i},c_{y,i},c_{z,i}\) 两两不相等。

一个 meta-set 由五张卡牌组成,且其中至少存在两个大小为 \(3\) 的子集是好的。求 meta-set 数量。

给出的卡牌两两不同。

数据范围为 \(n \leq 1000\),\(k \leq 20\),\(0 \leq c_{i,j} \leq 2\)。

观察

  1. 注意到 \(c\) 只有 \(0,1,2\) 两个取值,所以一个好的集合要么对应位相等,要么分别为 \(0,1,2\)。
  2. 一个 meta-set 应当恰好有 \(2\) 个大小为 \(3\) 的子集是好的,证明比较简单。
  3. 必然有一张卡牌存在于两个好的集合当中。
  4. 一个 meta-set 如果由 \((q,w,e,r,t)\) 组成,且 \(q\) 包含于两个 meta-set,那么比如满足 \((q,w,e)\) 和 \((q,r,t)\) 是好的集合。
  5. 一张卡牌可以用 \(\sum _{i=1}^k c_{x,i} \times 3^{i-1}\) 表示。

求解

通过观察得到的 \(3\) 性质,我们枚举这一张卡牌是 \(x\),根据 \(4\) 现在问题就变为统计有多少个好的集合包含了 \(x\),记为 \(f_x\)。

因为 \(n\) 很小,我们直接枚举一个好的集合当中的另一张卡牌,我们可以直接推出另一张卡牌是什么,对于每一张卡牌我们用一个数来表示丢进 map 中计数就行了,时间复杂度 \(O(n^2 \log n)\)。

#include<bits/stdc++.h>

#define int long long

#define vc vector
#define db double
#define fi first
#define se second
#define ll long long
#define mk make_pair
#define pb push_back
#define RI register int
#define PI pair<int,int>
#define ull unsigned long long
#define err cerr << "   -_-   " << endl
#define debug cerr << " ------------------- " << endl

#define NO puts("No")
#define YES puts("Yes")

using namespace std;

namespace IO{
	inline int read(){
		RI X=0, W=0;register char ch=getchar();
		while(!isdigit(ch)) W|=ch=='-', ch=getchar();
		while(isdigit(ch)) X=(X<<1)+(X<<3)+(ch^48), ch=getchar();
		return W?-X:X;
	}
	inline void write(int x){
		if(x<0) x=-x, putchar('-');
		if(x>9) write(x/10);
		putchar(x%10+'0');
	}
	inline void sprint(int x){write(x), putchar(32);}
	inline void eprint(int x){write(x), putchar(10);}
}using namespace IO;

const int MAXN = 1e3+5;
const int mod1 = 998244353;
const int mod2 = 1e9+7;
const int inf = 1e12;

int n, k, m[MAXN][25], v[25];

map<int,int> T;

inline void solve(){
	cin >> n >> k;
	int c=0, powc;
	for(int i=1;i<=n;++i){
		powc=1;c=0;
		for(int j=1;j<=k;++j){
			m[i][j]=read();
			c=c+powc*m[i][j];
			powc=powc*3;
		}
		T[c]++;
	}
	ll ans=0;
	int tot=0;
	for(int i=1;i<=n;++i){
		tot=0;
		for(int j=1;j<=n;++j){
			if(i==j) continue;
			c=0, powc=1;
			for(int p=1;p<=k;++p){
				if(m[i][p]==m[j][p]) v[p]=m[i][p];
				else v[p]=3-m[i][p]-m[j][p];
				c+=powc*v[p], powc*=3;
			}
			tot+=T[c];
		}
		tot/=2;
		if(tot==1) continue;
		ans=ans+tot*(tot-1)/2;
	}
	cout << ans;
	return ;
}

signed main(){
	solve();
	return 0;
}

标签:set,int,题解,卡牌,long,leq,CF1735D,Meta,define
From: https://www.cnblogs.com/OccasionalDreamer/p/18012075

相关文章

  • CF1793E Velepin and Marketing 题解
    题目大意有\(n\)个读者,第\(i\)年他们要一起读\(k_i\)本书,每一本书至少要让一个人读,每一个人也只能读恰好一本书。如果某一个人\(j\),如果有\(a_j\)个人这一年里和他读了同一本书,那么他就会感到满足。对于所有的\(q\)组询问,每组给定一个\(k_i\),求感到满足的人数的最......
  • CF1735E House Planning 题解
    题目大意一条直线上有\(n\)个房子和两个人,房子的坐标\(d_1,d_2,d_3\dotsd_n\),以及两个人坐标为\(p_1,p_2\)。现在会告诉你两个集合\(S_1=\{|p_1-d_i|,1\leqi\leqn\}\)以及\(S_2=\{|p_2-d_i|,1\leqi\leqn\}\)。这个写法可能不是很规范,但为了美观就写成这样了。......
  • CF1847E Triangle Platinum? 题解
    感谢@swiftc管理反馈的信息,对于题目大意确定的东西进行了完善。交互题。题目大意有一个长度为\(n\)的序列\(a\)满足\(1\leqa_i\leq4\),现在你可以进行不超过\(5500\)次询问,每次询问询问三个数\(1\leqi<j<k\leqn\),你将会得到\(a_i,a_j,a_k\)构成的三角形......
  • [ABC327G] Many Good Tuple Problems 题解
    Description对于一对长度均为\(M\)且元素值在\(\left[1,N\right]\)之间的序列\((S,T)\),定义其为好的当且仅当:存在一个长度为\(N\)的\(01\)序列\(X\),使得其满足如下条件:对于任意\(i\in\left[1,M\right]\),有\(X_{S_i}\neqX_{T_i}\)。给定\(N,M\),求在......
  • CF1918G Permutation of Given 题解
    总体思路本题通过每次在已知序列中加入\(2\)个元素的方法,可以构造出满足条件的序列\(A\),这里提供一种新的构造方法。性质因为序列\(A\)中所有元素构成的可重集与序列\(B\)中所有元素构成的可重集完全相等,所以\(A\)中所有元素之和与\(B\)中所有元素之和相等。\[\s......
  • SP277 CTGAME - City Game 题解
    题目传送门前置知识单调栈解法令\(f_{i,j}(1\lei\len,1\lej\lem)\)表示从\((1,j)\)到\((i,j)\)中以\((i,j)\)结尾的均为F的子串长度,即\((i,j)\)上面可延伸的最大距离(子矩形的长)。用单调栈的第一维存储子矩形的长,第二维存储子矩形的宽。考虑依次枚举每一......
  • qoj8171 Cola 题解
    题目链接点击打开链接题目解法很牛的题!!!会不了一点令\(pref_i\)表示第\(i\)轮知道了前缀\([1,...,i]\)考虑怎样的\(pref\)序列是合法的(即采用最优策略):\(pref_0=0\)\(\forall_{i\in[0,n-1]}\;pref_i\lepref_{i+1}\)\(pref\)中\(x\)的出现次数\(\len-x-1\),因......
  • [AGC021E] Ball Eat Chameleons 题解
    Description有\(n\)只变色龙,一开始都是蓝色。现在你喂了\(k\)次球,每次指定一只变色龙吃下你指定颜色的球。一只变色龙从蓝色变成红色当且仅当它吃的红球比蓝球多;一只变色龙从红色变成蓝色当且仅当它吃的蓝球比红球多。求最后能使所有变色龙都变成红色的方案数。两个方案......
  • AT_abc270_g [ABC270G] Sequence in mod P 题解
    题目传送门前置知识大步小步算法解法递推式为\(x_{n}=(ax_{n-1}+b)\bmodp\),发现可以统一消去\(\bmodp\),只在最后参与计算。以下过程省去模运算。当\(x_{0}=t\)时,则\(n=0\)即为所求。当\(a=0,x_{0}\net\)时,递推式转化为\(x_{n}=b\bmodp\)。若\(b=t\),则......
  • UVA10225 Discrete Logging 题解
    题目传送门前置知识大步小步算法题意多组询问,每次询问依次给定\(p,a,b\),求\(a^{x}\equivb\pmod{p}\)的最小非负整数解,其中\(a,p\)互质。解法BSGS板子题,不做过多介绍。貌似本题比P3846[TJOI2007]可爱的质数/【模板】BSGS和BZOJ3239DiscreteLogging数据较强......