news 2026/6/10 0:12:27

P7930 [COCI 2021/2022 #1] Set题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
P7930 [COCI 2021/2022 #1] Set题解

P7930 [COCI 2021/2022 #1] Set

题目背景

在知名游戏 SET 中,存在着一些数字、形状、颜色等不同的卡片,玩家的目标是确定一个存在的 triplet of cards(即卡片的三元组,也就是三张卡片构成的组合),使其符合特定的要求。Marin 和 Josip 很快就对这个游戏感到无趣,并对其进行了加强。

题目描述

在本题中,定义每张卡片代表着一个仅由 $ 1, 2, 3 $ 构成的长度为 $ k $ 的序列,共有 $ n $ 张卡片,卡片之间是无序的,保证卡片两两不同

定义一个 SET 表示,当且仅当一个无序的 triplet of cards 其中的三个序列的每一位均相同或各不相同,用原文中的话就是 same 或 pairwise different,更严谨地表示,我们令这三个序列为 $ S_i, S_j, S_k $,则一定满足如下条件:

  • $ i \lt j \lt k $
  • $ \forall x \in \left[1, k\right] $,满足 $ S_i(x) = S_j(x) = S_k(x) $ 或 $ S_i(x) \neq S_j(x) \neq S_k(x) $

例如 $ (1123, 1322, 1221) $ 便满足 $ 1, 3 $ 位均相同,$ 2,4 $ 位各不相同。

给你这些序列,求可以组成多少种本质不同的 SET。

输入格式

第一行为两个整数正整数 $ n, k $。

接下来 $ n $ 行中每一行包含一个仅由 $ 1, 2, 3 $ 构成的长度为 $ k $ 的序列,代表着一张卡片。

保证每张卡片上的序列不同。

输出格式

仅一行一个整数,表示可以组成的本质不同的 SET 的数量。

输入输出样例 #1

输入 #1

3 4 1123 1322 1221

输出 #1

1

输入输出样例 #2

输入 #2

2 2 11 22

输出 #2

0

输入输出样例 #3

输入 #3

5 3 111 222 333 123 132

输出 #3

2

说明/提示

【样例解释 #3】

可以组成的两个 SET 分别为 $ (S_1, S_2, S_3) $ 和 $ (S_1, S_4, S_5) $。

【数据范围】

对于全部数据,1 ≤ k ≤ 12 1\le k\le 121k121 ≤ n ≤ 3 k 1\le n\le 3^k1n3kS i S_iSi互不相同,1 ≤ S i ( x ) ≤ 3 1\le S_i(x) \le 31Si(x)3

Subtask特殊限制分数
1 11k ≤ 5 k\le 5k510 1010
2 22k ≤ 7 k\le 7k730 3030
3 33无特殊限制70 7070
说明

本题总分110 110110分。

本题译自 Croatian Open Competition in Informatics 2021/2022 Contest #1 T4 Set。

思路

FWT即可。

代码见下

#include<bits/stdc++.h>usingnamespacestd;longlongn,k,uu=0,d[4000006],sl=1,sr=0;charch;constdoublepi=acos(-1.0);structone{doublex,y;}a[4000006],b[4000006];oneoperator+(one a1,one b1){returnone{a1.x+b1.x,a1.y+b1.y};}oneoperator-(one a1,one b1){returnone{a1.x-b1.x,a1.y-b1.y};}oneoperator*(one a1,one b1){returnone{a1.x*b1.x-a1.y*b1.y,a1.x*b1.y+a1.y*b1.x};}oneoperator/(one a1,doubleb1){returnone{a1.x/b1,a1.y/b1};}constone w=(one){-0.50,0.50*sqrt(3.00)};constone w2=(one){-0.50,-0.50*sqrt(3.00)};voidxor1(longlongn3,one*f,longlongx){//cout<<x<<endl;for(into=1;o<=n3-1;o*=3){for(inti=0;i<=n3-1;i+=o*3){for(intj=0;j<=o-1;j++){one t1=f[i+j],t2=f[i+j+o],t3=f[i+j+o*2];if(x==1){f[i+j]=t1+t2+t3;f[i+j+o]=t1+t2*w+t3*w2;f[i+j+o*2]=t1+t2*w2+t3*w;}else{f[i+j]=(t1+t2+t3)/3.00;f[i+j+o]=(t1+t2*w2+t3*w)/3.00;f[i+j+o*2]=(t1+t2*w+t3*w2)/3.00;}}}}return;}intmain(){cin>>n>>k;for(inti=0;i<=n-1;i++){uu=0;for(intj=1;j<=k;j++){cin>>ch;uu=uu*3+ch-'1';}d[uu]++;a[uu]=(one){1.00,0.00};//cout<<uu<<endl;}sl=pow(3,k);xor1(sl,a,1);for(inti=0;i<=sl-1;i++){//cout<<a[i].x<<" "<<a[i].y<<endl;a[i]=(a[i]*a[i]*a[i]);}xor1(sl,a,-1);//cout<<a[0].x<<endl;cout<<(longlong)((a[0].x+0.50-n)/6.00)<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 18:14:26

Java做人工智能?JBoltAI带你轻松入门AI应用开发

你是否曾经想过&#xff0c;用Java这门经典编程语言也能开发出智能的人工智能应用&#xff1f;今天&#xff0c;我们就来聊聊JBoltAI框架&#xff0c;看看它是如何让Java开发者轻松踏入人工智能领域的大门&#xff01;一、Java与AI的奇妙邂逅Java&#xff0c;作为一门历史悠久且…

作者头像 李华
网站建设 2026/5/9 14:16:33

华为 CANN 架构深度解析:AIGC 大模型的昇腾算力底座

在 AIGC 大模型时代&#xff0c;算力成为模型训练、推理与落地的核心瓶颈&#xff0c;而异构计算架构则是释放硬件算力的关键。华为针对 AI 场景推出的CANN&#xff08;Compute Architecture for Neural Networks&#xff09; 异构计算架构&#xff0c;作为昇腾 AI 处理器的 “…

作者头像 李华
网站建设 2026/5/22 1:34:32

CANN 算子库体系全解:从 ops-nn 到 Transformer,支撑 AIGC 大模型高效计算

算子是 AI 模型的 “计算基石”&#xff0c;对于参数量动辄千亿、万亿的 AIGC 大模型而言&#xff0c;算子的性能与丰富度直接决定了模型训练的速度、推理的延迟以及硬件算力的利用率。华为 CANN 仓库围绕 AI 计算场景&#xff0c;打造了覆盖基础计算、神经网络、大模型、计算机…

作者头像 李华
网站建设 2026/6/1 18:52:45

AI原生应用领域多模态交互:开启智能交互新时代

AI原生应用领域多模态交互:开启智能交互新时代 关键词:AI原生应用、多模态交互、智能交互、新时代、交互方式 摘要:本文深入探讨了AI原生应用领域的多模态交互,介绍了多模态交互的核心概念,阐述了其算法原理、数学模型,通过项目实战展示了多模态交互的实际应用。探讨了多…

作者头像 李华
网站建设 2026/4/18 12:55:15

代价函数,矩阵的计算

假设函数: h(x) a b*x 我们根据假设函数来进行图形的绘制与我们的数据进行比对 上图中的cost function即为代价函数为了更好的理解代价函数我们可以使用空间立体图形来对代价函数进行描述&#xff0c;对于一组数据而言我们根据其假设函数可以得出其代价函数&#xff0c;我们将…

作者头像 李华
网站建设 2026/6/6 3:26:08

低代码赋能供应商管理:打破管理壁垒,重塑供应链效能

在企业数字化转型浪潮中&#xff0c;供应链作为核心竞争力的重要载体&#xff0c;其稳定与高效直接关乎企业生存发展。而供应商管理作为供应链体系的关键一环&#xff0c;传统管理模式的痛点日益凸显&#xff0c;亟需全新技术手段破局。低代码平台凭借灵活、高效的特性&#xf…

作者头像 李华