Codeforces Round #448 (Div. 2) C. Square Subsets

TSmaster CANFD配置避坑指南:为什么你的PCAN盒不支持最新版本? 本文针对TSmaster配置PCAN硬件进行CANFD通信时的常见问题,提供了详细的避坑指南。重点解析了CANFD配置中TSEG1等关键参数的理解误区,并深入探讨了TSmaster新版本与PCAN硬件驱动之间的兼容性变化,帮助工程师快速定位并解决连接失败或无法发送CANFD报文等问题。 阅读详情

C. Square Subsets

time limit per test4 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
Petya was late for the lesson too. The teacher gave him an additional task. For some array a Petya should find the number of different ways to select non-empty subset of elements from it in such a way that their product is equal to a square of some integer.

Two ways are considered different if sets of indexes of elements chosen by these ways are different.

Since the answer can be very large, you should find the answer modulo 109 + 7.

Input
First line contains one integer n (1 ≤ n ≤ 105) — the number of elements in the array.

Second line contains n integers ai (1 ≤ ai ≤ 70) — the elements of the array.

Output
Print one integer — the number of different ways to choose some elements so that their product is a square of a certain integer modulo 109 + 7.

Examples
input
4
1 1 1 1
output
15
input
4
2 2 2 2
output
7
input
5
1 2 4 5 8
output
7

转自:http://blog.youkuaiyun.com/zstu_zy/article/details/78643674

题意:给出1e6个数,每次可以从这n个数里选任意个数,问有多少种选法使得选出的数 是某个数的平方,
做法:引文每个数之后70,1到70只有19个质数,所以可以状压dp,枚举每个质数的奇偶情况,然后对1到70枚举每次选择奇数个或者偶数个。

#include<bits/stdc++.h>
using namespace std;
bool vis[100];
const int mod = 1e9+7;
bool check(int x){
    if(x < 2) return false;
    for(int i= 2;i*i <= x;i ++){
        if(x %i == 0) return false;
    }
    return true;
}
int cnt[100];
int dp[100][1<<19];//表示前i的数中, 几何状态为j的时候的方案个数。
int qp[100050];
vector<int> v;
int ss[100];
void init(){
    for(int i= 2;i <= 70;i ++){
        for(int j = 0;j < v.size();j ++){
            int tmp = i;
            while(tmp % v[j] == 0){
                tmp /= v[j];
                ss[i] ^= (1<<j);
            }
        }
    }
    qp[0] = 1;
    for(int i = 1;i < 100050;i ++) qp[i] = qp[i-1]*2%mod;
}


int main(){
    for(int i = 1;i <= 70;i ++) if(check(i)) {vis[i] = true;v.push_back(i);}
    init();
    int n;
    cin>> n;
    for(int i= 1;i<= n;i ++) {
        int now;
        scanf("%d",&now);
        cnt[now]++;
    }
    dp[0][0] = 1;
    for(int i= 1;i <= 70;i ++){
        if(cnt[i] == 0) {
            for(int j = 0;j < (1<<19);j ++){
                dp[i][j] = dp[i-1][j];
            }
        }
        else {
            for(int j = 0;j <(1<<19);j ++){
                dp[i][j^ss[i]] = (dp[i][j^ss[i]] + 1ll*qp[cnt[i]-1] * dp[i-1][j])%mod;//  奇数个元素的子集个数。
                dp[i][j] = (dp[i][j]+1ll*qp[cnt[i]-1] * dp[i-1][j])%mod;// 偶数个元素的子集个数。
            }
        }
    }
    cout << dp[70][0]-1 << endl;//非空子集个数。
    return 0;
}
第9集:AI 驱动的智能日志分析!用 RAG 实现秒级日志检索与异常检测 文章摘要:AI驱动的智能日志分析系统 本文介绍了一个基于RAG(检索增强生成)技术的智能日志分析解决方案,旨在解决传统日志系统中的三大痛点:机械的关键词搜索、缺乏语义理解、告警与日志割裂。系统通过以下步骤实现: 环境准备:安装必要的Python依赖库,包括日志处理、Elasticsearch/Loki连接和时序异常检测工具。 核心设计:构建日志处理流水线,分为日志采集、向量化存储和AI检索分析三个阶段,创建专门的日志分析Agent。 技术实现:使用ChromaDB存储日志向量,通过HuggingFace E 阅读详情

相关推荐

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。

weixin_40132006的博客 2241

Codeforces Round #448 (Div. 2): C. Square Subsets(线性基)

C. Square Subsets time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Petya was late for the lesson too. The te

加载中... 697

FreeRTOS实战:如何避免HAL_Delay在高优先级中断中的坑(附TIM6配置指南)

本文深入剖析了在STM32 FreeRTOS项目中,于高优先级中断内调用HAL_Delay函数导致系统假死的根本原因——SysTick时基被FreeRTOS占用且优先级最低。文章提供了治本方案:通过配置TIM6作为独立且最高优先级的HAL时基,实现与FreeRTOS系统心跳的解耦,并附上详细的CubeMX配置与代码移植指南,确保系统实时性与稳定性。

weixin_29230059的博客 64

C. Square Subsets(状压+素因子分解)

题目 题意:     给定n个数,要求选出任意多的数,使得这些数的乘积为平方数。     1 ≤ n ≤ 105,1 ≤ ai ≤ 701 ≤ n ≤ 10^5,1 ≤ a_i ≤ 701 ≤ n ≤ 105,1 ≤ ai​ ≤ 70 分析:     由于这些数都很小,所以我们必然是在它们身上做文章。对于完全平方数,它的素因子分解后每个素因子的指数均为偶数。所以我们就可以对这些数进行素因子分解来探...

weixin_44316314的博客 403

Altium Designer 20/21/22/23版本汉化与库管理全攻略(附避坑指南)

本文系统梳理了Altium Designer 20/21/22/23等多个版本的汉化方案与库管理全流程。针对不同版本的中文支持差异,提供了安全的汉化设置指南与版本选择建议。重点详解了原理图库、PCB封装库及集成库的创建、管理与团队协作最佳实践,并附有常见问题避坑指南,帮助硬件工程师高效搭建稳定的设计环境。

rgv234567的博客 1113

解锁Jetbrains AI助手:中国开发者实战配置与效率跃迁指南

本文为中国开发者提供了一份详细的Jetbrains AI助手实战配置指南。针对服务地域限制,核心解决方案是通过修改Jetbrains账户区域信息并配置网络代理,实现插件的稳定启用。文章进一步分享了AI助手在解读遗留代码、生成中文提交信息、智能问答等场景下的具体应用,旨在帮助开发者深度集成这一工具,实现编码生产力的显著提升。

weixin_28832121的博客 573

C. Square Subsets

C. Square Subsets题目链接 给一个序列ai,长度n,问有多少种方法可以选一些数字出来,且使得这些数字乘积是一个平方数。 n<=1e5 , ai<=70 任意一个平方数可以表示为p1^a1 * p2^a2 * ……其中p1表示质数,a1是一个偶数,且我们不关心具体是多少只需要知道是奇偶即可,那么可以直接用01来表示。 观察到ai比较小,我们直接把70以内的数字拆分成质因子表示形

WeYoungg的博客 564

ESP-IDF下载配合MQTT协议接入云平台实例

通过ESP-IDF下载环境搭建,结合MQTT协议实现设备与云平台通信,详解从配置到连接的完整流程,助力物联网应用开发。重点涵盖espidf下载和MQTT集成关键步骤。

weixin_28913879的博客 454

C. Square Subsets(状压DP+二进制)

传送门 题意:给定长度为n(<=1e5)的数组a(1<=ai<=70),找到有多少个非空组合的乘积为平方数,结果mod 1e9+7。 题解:CF895C Square Subsets(状压dp)。 dp[i][j]表示的是什么,怎么更新。dp[75][1<<19]会MLE,每一层都只由上一层觉得,所以二维滚动数组即可 i 表示的是1~70中的一个数,j 表示的是0~1<<19这些数(每个数表示一个组合:2,3,5,...的次数为奇数还是偶数)。dp[i][j

I_have_a_world的博客 201

基于yolov5的鸟类图像准确识别

本项目主要基于yolov5进行鸟类准确识别,主要识别白鹭家族,红脚鹬,反嘴鹬,环颈珩,小白鹭以及夜鹭六类鸟

weixin_46064184的博客 3823

E2B Agent Runtime Sandbox 沙箱技术架构研究

本实现指南基于E2B的技术架构,提供了完整的基于Firecracker和Docker的Agent Runtime Sandbox后端服务实现方案。架构设计:参考E2B的分层架构,实现API层、管理层和虚拟化层Firecracker集成:深度集成Firecracker提供硬件级安全隔离完整功能:支持文件读写、shell执行、浏览器访问等核心功能生产就绪:提供Docker部署、监控、测试和安全配置可扩展性:设计支持水平扩展和高并发场景。

AI天才研究院 746

Codeforces Round #448 (Div. 2):C题Square Subsets——线性基|状压dp

题目链接:https://codeforces.com/contest/895/problem/C 题意:给你n个数,每个数<=70,问有多少个集合,满足集合中所有数相乘是个完全平方数(空集除外) 题解:比赛时对这个一点思路都没有,自闭了,但是观察到数小,考虑可以用状压dp来求,但是发现很不好想,也不好调,赛后意外发现学长写的这个题的题解,发现竟然可以用线性基来求,而且相对而言也...

mumei的博客 376

使用 MATLAB/Simulink + Simscape Electrical 构建一个他励直流电机的启动与制动过程仿真模型

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

amy_mhd的博客 231

Codeforces Round #448 (Div. 2) C. Square Subsets 状压DP

平方数肯定满足所有质数的次幂都是偶数,具体数值我们不关心只关心奇偶。 由于a[i]的取值是1-70,我们发现1-70中质数有19个 于是我们可以用 (1<<19)-1 个状态表示这19个质数的幂次是奇数还是偶数 由于所有集合都是由空集扩展而来。 我们设dp的初状态dp[0][0]为 没有处理数时,所有质数次幂为偶数时 的个数 是1. 由于数加入顺序对组成最终集合的...

bjfu170203101的博客 212

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Codeforces Round #448 (Div. 2)C. Square Subsets

题目连接:(C. Square Subsets)[http://codeforces.com/contest/895/problem/C] 题意:给N个范围在1~70的数找出有多少种非空子集之积是一个平方数。 题解:我们可以发现1~70之间只有19个质数,编号(1~19)。要使的某个数是个平方数肯定每个质数出现偶数次。我们可以用状压dp 先预处理1~70每个质因子出现的次数偶数为0奇数为1,比如i...

weixin_30887919的博客 150

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Codeforces Round #448 (Div. 2) C. Square Subsets(状压)

题目链接:http://codeforces.com/contest/895/problem/C 70以内就19个素数,直接状压,0表示出现偶数次,1表示出现奇数次,然后对于每个数枚举选取奇数次还是偶数次,T了一发随便改改就过了,其实好像可以处理出2的幂次来搞啊?貌似那样就是稳定7e7的复杂度哦?绝望。。。 代码: #include using namespace std;

bibibibi的博客 285

Codeforces Round #448 (Div. 2) C. Square Subsets

前言 今天做题的时候,觉得自己的线性基很假。。 于是重新学了一下。。 资料 线性基 题解 这题的话,考虑到如果质数个数是偶数,就是完全平方数 一个DP比较简单。。 但是我们考虑线性基 在这个序列里面,我们选择的子集,如果为0,那么数量是2cnt2cnt2^{cnt} cnt是不在基里面的个数 因为基里面的数都是线性无关的 CODE: #include&lt;cst...

OZY的博客 215

Codeforces Round #448 (Div. 2) C. Square Subsets [数论II][dp II][bitmasks]

题目:http://codeforces.com/contest/895/problem/C 题意:在1e5个数字中选一些数字,使他们的乘积为平方数。 题解:最大数字只有70,如果把每个数字分解为质因子,最多也只有19个可能的数字。乘积为平方数则此数字分解为的质因数个数都为偶数,可用异或转移表示为是否都为0。例如 2为第一个素数,它的状态表示为1如果再加入一个2可以转移到1^1=0。3...

weixin_34321977的博客 126

Codeforces Round #448 (Div. 2) C. Square Subsets 乘积为平方数的集合个数 - 状压dp OR 线性基

题目链接:https://codeforces.com/contest/895/problem/C 题目大意:给你n个数。问有多少个子集的乘积为平方数。mod (1e9+7)。 思路: 如果一个数的质因数都为偶数个,那么这个数就是平方数。 因为a[i]<=70。我们用状压来表示每个数的质因数的奇偶状态。奇为1.偶为0。 我们用dp[i][s]表示前i个数组成乘积为状态s的方案数。 然后我们枚...

H_ang的博客 293

Codeforces Round448 C Square Subsets

Codeforces Round448 C 题目大意 n个数(n<=1e5),选其中一部分数相乘,结果为一个完全平方数,问有多少种选法,每个数的范围为[1,70]。 思路 考虑到,完全平方数是那些每种质因子个数都为偶数的数,所以把每个数都分解成质因子相乘的形式,同时对每种质因子的个数对%2,因为70以内的质数只有19个,所以可以把每个数压位,第i位表示这个数的因子是否有奇数个第i个...

178

Codeforces Round 448 C. Square Subsets

摘要:题目给定1e5个1~70的数字,求不同取数集合使元素乘积为完全平方数的方案数。解法利用桶计数和状态压缩,将每个数分解为19个质因数的奇偶状态。通过动态规划统计满足条件的集合数,其中奇偶取法方案数为2^(k-1)。最终答案为DP结果减1除去空集,时间复杂度O(70*2^19)。

m0_72772440的博客 176

Codeforces895 C. Square Subsets(状压dp)

题意: 给定长度为n的序列, 问有多少个子集,满足子集的积是完全平方数, 答案对1e9+7取模 数据范围:n<=1e5,1<=a(i)<=70 解法: 观察到a(i)<=70,打表发现70以内的质数只有19个,容易想到状压. 完全平方数的性质是每个质因子的指数都是偶数, 那么如果用19位二进制数表示质因子的奇偶性,那么完全平方数就是全0, 那么这题可以搞一波状压dp. 令d[i][j]表示前i个数,子集乘积状态为j的方案数. 然而第一维1e5,第二维1e6,空间都开不下. 再观

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 274

C. Square Subsets(状压dp+组合数学/线性基)

https://codeforces.com/problemset/problem/895/C 线性基待补。 思路:将质因子状态集合状压,0表示此时次数为偶数,1表示次数次数为奇数。 对于当前s,奇数时候其分解的质因子要和s异或得之前的状态。偶数直接沿用。 对于某个数字出现的次数k,我们考虑取C(1,K)+C(3,K)+----=2^(K-1).偶数同理。 最后注意,卡时间,预处理幂次。卡空间。改成滚动。 #include<iostream> #include<v..

代码笔记本 301
上一篇: Codeforces Round #406 (Div. 1) A. Berzerk 记忆化搜索
下一篇: 新生赛第二场 C题
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值