首页 > 其他分享 >CF 1735 D. Meta-set

CF 1735 D. Meta-set

时间:2023-06-17 20:22:56浏览次数:62  
标签:set int sum 1735 合法 ++ Meta 三元 五元

题目链接:https://codeforces.com/contest/1735/problem/D
代码链接:https://codeforces.com/contest/1735/submission/209958432

给定n个长度为k的串(互不相同),求合法五元集的数量
合法五元集定义为至少包含超过1个合法三元集
合法三元集定义为三个串,三个串的属性要么全部相同,要么互不相同,每个属性互相独立
显然,一个合法五元集只包含两个合法三元集:
\(\quad\) 一个合法三元集中的两个串可以唯一确定另一个串
\(\quad\) 所以一个合法五元集只能是由两个包含着同一个串的合法三元集组成
解法:
\(\quad\) 二重循环枚举两个串,O(k)计算出另一个串,sum[i]记录包含第i个串的合法三元集的数量
\(\quad\) 最后答案就是 枚举每一个串,对于第i个串,从包含第i个串的合法三元集中选出两个构成合法五元集,求和即可
$$ans = \sum_{0}^{n-1} sum[i] \times (sum[i] - 1) / 2$$

点击查看代码
/*
    给定n个长度为k的串(互不相同),求合法五元集的数量
    合法五元集定义为至少包含超过1个合法三元集
    合法三元集定义为三个串,三个串的属性要么全部相同,要么互不相同,每个属性互相独立
    显然,一个合法五元集只包含两个合法三元集:
        一个合法三元集中的两个串可以唯一确定另一个串
        所以一个合法五元集只能是由两个包含着同一个串的合法三元集组成
    解法:
        二重循环枚举两个串,O(k)计算出另一个串,sum[i]记录包含第i个串的合法三元集的数量
        最后答案就是 枚举每一个串,对于第i个串,从包含第i个串的合法三元集中选出两个构成合法五元集,求和即可
        ans = \sum_{0}^{n-1} sum[i] \times (sum[i] - 1) / 2
*/
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main(void)
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n, k;
    cin >> n >> k;
    vector< vector<int> > a(n, vector<int>(k));
    vector<i64> val(n, 0);
    map<i64, int> id;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < k; j++){
            cin >> a[i][j];
            val[i] = val[i] * 3 + a[i][j];
        }
        id[val[i]] = i;
    }
    vector<int> sum(n, 0); //包含第i个串的合法三元集的个数
    function<i64(int, int)> getval = [&] (int x, int y){
        i64 ret = 0;
        for(int i = 0; i < k; i++){
            if(a[x][i] == a[y][i]){
                ret = ret * 3 + a[x][i];
            }else{
                ret = ret * 3 + 3 - (a[x][i] + a[y][i]);
            }
        }
        return ret;
    };
    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
            i64 tem = getval(i, j);
            if(id[tem] > j){
                sum[i]++;
                sum[j]++;
                sum[id[tem]]++;
            }
        }
    }
    i64 ans = 0;
    for(int i = 0; i < n; i++){
        ans += sum[i] * (sum[i] - 1) / 2;
    }
    cout << ans << endl;
    return 0;
}

标签:set,int,sum,1735,合法,++,Meta,三元,五元
From: https://www.cnblogs.com/JustACommonMan/p/17488161.html

相关文章

  • Set up Your Diagnostic Interface for JPRO Commercial Diagnostics
    ThereareseveraldiagnosticinterfacesarecompatiblewithJPROCommercialVehicleDiagnosticssoftware.Youneedsetupyourdiagnosticsinterfaceinconfigurationsetting.Preparations:JPRONoregonCommercialFleetDiagnostics2023FreeDownloadNexiqU......
  • https请求报Connection reset问题
    背景:使用HttpsURLconnection或者HttpURLConnection进行https请求时,有时会报Connectionreset异常原因:这是因为客户端的TLS版本服务端不支持的原因。对于JDK1.6,支持SSLv2、SSLv3、TLSv1,默认使用TLSv1对于JDK1.7,支持SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2,默认使用TLSv1.1对于JDK1.8......
  • 「Solution Set」06/16
    要没学上力!P9340[JOISC2023Day3]Tourismtrick:求虚树覆盖联通块的大小:将关键点按dfn排序,所覆盖到的边数为相邻两个关键点之间的边数和除以二(假设第一个和最后一个相邻)然后我们考虑回滚莫队,先把所有关键点弄下来按dfn排序,然后删掉点的时候就用链表计算贡献。完事了就......
  • 快时钟 慢时钟交互如何检查set/hold time
    参考书籍《StaticTimingAnalysisforNanometerDesign》 慢时钟——>快时钟首先进行时钟约束create_clock-nameCLKM-period20-waveform{010}[get_portsCLKM]create_clock-nameCLKP-period5-waveform{02.5}[get_portsCLKP]  由于电路是从慢时钟......
  • 白名单rundll32加载shellcode上线metasploit(nim学习系列)
    白名单rundll32加载shellcode上线metasploit监听metasploitmsfconsole-x"useexploits/multi/handler;setlhost192.168.0.101;setlport443;setpayloadwindows/x64/meterpreter/reverse_tcp;exploit"生成shellcodemsfvenom-pwindows/x64/meterpreter/r......
  • Luogu3792 由乃与大母神原型和偶像崇拜 - 线段树 - set -
    题目链接:https://www.luogu.com.cn/problem/P3792题解:一点小小的空间震撼(ML:125MB)首先询问可以转化成:区间\([l,r]\)的\(max-min+1=r-l+1\)并且区间内没有重复元素。可以考虑对每个点\(i\)记一个前驱结点\(pr_i\),表示\(a_{pr_i}=a_i\),且\(pr_i\)是\(i\)前面离\(i\)......
  • ABP框架中UnitOfWorkManager.Current.SetTenantId()并不是修改AbpSession.TenantId的
    1.结论UnitOfWorkManager.Current.SetTenantId()修改的是ABP过滤器中使用的TenantId,并不会修改AbpSession.TenantId代码演示:2.关于UnitOfWorkManager.Current.SetTenantId()方法的作用前提:ABP框架是是支持多租户的,对于单数据库的多租户设计,需要通过TenantId来区分宿主和......
  • Python中常用set()方法详解!
    set是Python中一种集合数据类型,表示一个无序且不重复的集合。set()方法可以用于创建一个空的集合,也可以将其他可迭代对象转换为集合。与其他Python数据类型不同,set没有索引,不能通过索引访问其元素,但可以使用一些方法来操作和访问集合中的元素。1、add():添加一个元素到set集......
  • 了解基于模型的元学习:Learning to Learn优化策略和Meta-Learner LSTM
    摘要:本文主要为大家讲解基于模型的元学习中的LearningtoLearn优化策略和Meta-LearnerLSTM。本文分享自华为云社区《深度学习应用篇-元学习[16]:基于模型的元学习-LearningtoLearn优化策略、Meta-LearnerLSTM》,作者:汀丶。1.LearningtoLearnLearningtoLearnbyGradien......
  • HashSet、LInkedHashSet的使用和特点
    HashSet的使用Java中的HashSet是CollectionsFramework中的一个类。它允许您使用哈希表在集合中存储多个值。哈希表借助哈希机制以无序的方式存储值。导入java.util.HashSet包后,以下是在Java中创建HashSet的语法:HashSet<data_type>name=newHashSet(capacity,lo......