cf 895C Square Subsets

基于VSCode+clangd插件打造高效C++开发环境之四:clangd配置 本文介绍如何配置VSCode+clangd插件进行高效C++开发。重点内容包括:1)生成compile_commands.json文件,通过ninja工具提取编译命令并使用gen_compdb脚本转换;2)配置clangd命令行参数,如设置后台索引、并行度等;3)编写.clangd配置文件,调整编译标志和诊断选项;4)添加.clang-format文件定义代码风格;5)在VSCode中添加远程服务器工作目录。配置完成后需重启clangd服务使更改生效。文章还提供了MTK/QCOM等不同平台生成compile 阅读详情

一 原题

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 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
Note

In first sample product of elements chosen by any way is 1 and 1 = 12. So the answer is 24 - 1 = 15.

In second sample there are six different ways to choose elements so that their product is 4, and only one way so that their product is 16. So the answer is 6 + 1 = 7.



二 分析

题意:给定n个1到70之间的数,问有多少种组合方式,使得选出的数的乘积是完全平方数。

在[1, 70]区间上共有19个素数,很容易想到把整数i表示为一个19维的0-1向量,每一维表示有偶/奇数个对应的素因子,把这样的向量记作mask[i]。两个数相乘则对应为两个向量在每个维度上做异或,完全平方数对应全0向量。

理解了这一点之后,这道题就可以用动态规划解决了,dp[i][j](i<=70, j<2^20)表示考虑输入中小于等于i的数,这些数相乘得到j表示的向量的方案数。递推方程为:
dp[i+1][j] += dp[i][j] * f1[i+1], dp[i+1][j^mask[i+1]] += dp[i][j] * f2[i+1]
其中f1[i]表示从输入中选取偶数个i的方案数,f2[i]表示从输入中选取奇数个i的方案数。

这道动归的状态表达方法之前没见识过,RBQ RBQ


三 代码

AC代码:
#include<iostream>
#include<cstring>
using namespace std;

const int inf = 72;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 10;

int n, times[inf];
bool prime[inf];
int mask[inf];
long long pow[maxn];
long long f1[inf], f2[inf];
long long dp[2][1 << 20]; // total 19 prime numbers in [1, 70]

void setMask() {
	for(int i = 1; i < inf; i++) {
		int cnt = 0;
		for(int j = 1; j <= i; j++) {
			if(!prime[j]) continue;
			int x = i;
			while(x % j == 0) {
				x /= j;
				mask[i] ^= (1 << cnt);
			}
			cnt++;
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin >> n;
	int val;
	for(int i = 0; i < n; i++) {
		cin >> val;
		times[val]++;
	}
	
	// prepare f1 and f2
	pow[0] = 1;
	for(int i = 1; i < maxn; i++) {
		pow[i] = (pow[i - 1] + pow[i -1]) % mod;
	}
	for(int i = 0; i < inf; i++) {
		if(times[i] == 0)
			f1[i] = 1, f2[i] = 0;
		else
			f1[i] = f2[i] = pow[times[i] - 1];
	}
	
	// prepare mask
	for(int i = 2; i < inf; i++) {
		prime[i] = true;
		for(int j = 2; j * j <= i; j++) {
			if(i % j == 0) {
				prime[i] = false;
				break;
			}
		}
	}
	setMask();

	// begin dp
	dp[0][0] = 1;
	for(int i = 1; i <= 70; i++) {
		int cur = i % 2;
		memset(dp[cur], 0, sizeof(dp[cur]));
		for(int j = 0; j < (1 << 20); j++) {
			dp[cur][j] += (dp[1 - cur][j] * f1[i]) % mod;
			dp[cur][j] %= mod;
			dp[cur][j ^ mask[i]] += (dp[1 - cur][j] * f2[i]) % mod;
			dp[cur][j] %= mod;
		}
	}
	
	cout << (dp[0][0] - 1) % mod << endl; // due to 70 is even, it's dp[0][0]

	return 0;
}


【ComfyUI】FluxKontext 身形调优与体态增强 AI身形调优与体态增强解决方案 该工作流通过Flux系列模型实现人物体态的智能化增强,主要特点包括: 采用UNet主体模型+双文本编码器+身形增强LoRA的架构组合 通过ReferenceLatent保持原始姿态的同时强化胸腰臀比例 完整工作流包含图像加载、文本编码、潜空间映射等8个核心节点 支持自动化的前后效果对比展示 应用优势: 保持人物自然姿态的前提下实现局部强化 支持通过Prompt精确控制增强方向 适用于摄影后期、角色美化等创作场景 输出效果稳定且风格统一 使用方 阅读详情

相关推荐

Codex智能体从零搭建:环境配置、代码管理与MCP扩展实战

AI智能体(Agent)作为连接大语言模型与实际应用的关键技术,通过感知、决策与执行框架,将AI能力融入具体工作流。其核心原理在于利用提示工程、上下文管理与工具调用,将自然语言指令转化为可执行操作。在软件开发领域,AI智能体能够显著提升代码生成、项目管理和自动化任务的效率。通过Model Context Protocol(MCP)等标准化协议,智能体可以安全、结构化地集成外部工具与服务,实现能力扩展。本文聚焦于Codex这一AI驱动的代码助手平台,详细解析其环境配置、代码索引、记忆系统等核心模块,并深入探讨

weixin_34220179的博客 589

codeforces 895 C. Square Subsets(状压dp)

http://codeforces.com/contest/895/problem/C 题意:给出n个数字,问有多少个非空子集的乘积为完全平方数 看见ai范围很小就想着应该围绕ai来做,一直在思考组合数怎么解,发现情况太多太难考虑完全,看题解才想起有状压dp这个东西解决状态数量较少的问题 - _-!!! 思路:考虑一个数字为质因子分解后,如果其为完全平方数,那么每个质因子的次方和肯定为偶数,小于...

- 回忆゛ 206

DELL服务器BIOS下配置RAID阵列

dell服务器配置raid阵列

weixin_58250887的博客 1万+

CF895C Square Subsets(状压dp&组合数学)

CF895C Square Subsets(状压dp&组合数学) 平方数的一个性质是:所有质因子都出现偶数次。 且ai≤70a_i \le 70ai​≤70,小于707070的质因子只有191919个。 考虑把质因子当作状态,出现偶数次记为0,奇数次记为1。 因为权值很小,考虑以权值进行递推,令dp[i][s]dp[i][s]dp[i][s]。表示对于选择值域在[1,i][1,i][1,i]状态为sss​的方案数。 初始化dp[0][0]=1dp[0][0]=1dp[0][0]=1。 预处理每个值出

Harris-H的博客 582

Android 13 SPRD 源码默认打开多用户实际无效果问题修复

【代码】Android 13 SPRD 源码默认打开多用户实际无效果问题修复。

m0_60898338的博客 449

在 SAP SD(销售与分销)模块中,销售合同 / 订单的抬头(Header) 和行项目(Item) 核心数据表如下,按 “核心表 + 扩展表” 分类说明,同时区分销售合同(Contract,类型 W

SAP SD模块中销售合同/订单的核心数据表分为抬头和行项目两类。核心抬头表包括VBAK(基础数据)和VBUK(状态数据),核心行项目表包括VBAP(基础数据)和VBUP(状态数据)。扩展表包含VBAKE(抬头增强)、VBAPe(行项增强)、VBEP(计划行)、VBFA(凭证流)等。销售合同(WK/WC)和订单(OR)通过VBAK-AUART字段区分,核心表结构相同。查询时需注意单据类型筛选,并通过VBELN主键关联抬头和行项数据,KNUMV关联定价条件,VBFA表追踪凭证流。

金牌架构师 1090

895C - Square Subsets 状压DP + 离散化

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

你那么爱笑,家里人知道吗? 617

RK3588开发笔记-Hailo AI模块调试

本文详细介绍了在RK3588开发板上调试HailoAI模块的全过程。首先概述了RK3588处理器的强大性能(4核A76+4核A55,6TOPS算力)和Hailo-8 AI加速模块的特点,重点阐述了通过PCIe接口连接两者的硬件方案。调试步骤包括:确认内核PCIe配置、编译Hailo驱动、下载固件文件并部署到指定目录,最后通过运行resnet模型验证模块性能(实测FPS达2456)。文中提供了完整的软件包下载地址和GitHub源码链接,为开发者实现类似AI加速方案提供了实用参考。

flypig has a dream! 961

CF895C: Square Subsets题解

题目链接 http://codeforces.com/contest/895/problem/C 题意 从n个数中选取不少于1个数, 使得这些数的乘积为平方数的方案数. 分析 注意到这n个数都为不超过70的正整数, 由算数基本定理可得这n个数一共最多需要19种素数来构造, 如: 17 = 17 36 = 2 * 2 * 3 * 3 70 = 2 * 5 * 7 注意到, 若

z's blog 401

基于STM32、HAL库的CH9434总线转UART驱动程序设计

CH9434是一款USB转4串口控制芯片,可以将单个USB接口扩展为4个独立的串口(UART)。支持多种数据格式(数据位5-8,停止位1/1.5/2,奇偶校验或无校验)// 读取接收到的数据。// 重新启动接收中断。// 向所有4个串口发送数据。// UART初始化函数示例(USART1)// 其他UART初始化函数类似...// 初始化CH9434。// 初始化UART1。// 初始化UART2。// 初始化UART3。// 初始化UART4。工作电压:3.3V/5V兼容。

corlin6688的博客 990

第12步 支持向量机(SVM)

搭建SVM

Jet4505的博客 1050

CF895C dp/线性基

链接:点击打开链接 题意:n个数,选子集乘积之和是完全平方数的子集个数 思路:首先题目中ai非常小,显然可以状态压缩因子把问题转化成异或和为0的方案数字。 在此基础上可以DP解决或者使用线性基 DP方法 用dp[i][j]表示i次插入时异或和为j的方案数,我们可以想到插入一个新数字就是   dp[i-1][j ^ st]+=dp[i-1][j] 但是到此每插入一个数都要遍历j (2^1

zxl博客 479

ESP32-IDF开发实例-外部Flash与FatFs文件系统数据存取

FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,并且与磁盘I/O层完全分开。因此,它独立于平台。它可以并入资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。ESP32-IDF对FatFs提供了良好的支持。

视觉与物联智能 2915

CF895C Square Subsets(状压dp)

CF895C Square Subsets(状压dp) 时间限制 4.00s 内存限制 250.00MB judge:点我跳转 题目描述 Petya was late for the lesson too. The teacher gave him an additional task. For some array a a Petya should find the number of di...

画船听雨眠 423

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[CF895C]Square Subsets

题意简述 给定\(n\)个数\((n\le10^5 )\),每个数\(\le70\),在其中选择一个子集,求使其乘积为完全平方数的方法有多少种。 传送门 题解 一道状压\(dp\)好题。 注意到此题\(a_i\leq70\), 并且一个数是否为完全平方数只与它的质因子奇偶性有关,所以\(n\leq10^5\) 是废话,我们只需要用一个桶统计每个数出现的个数就好了。 另外,打表发现\(7...

bangzhoutui3858的博客 143

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

CF 895C-Square Subsets

题意简述 给你一个有n个元素的可重集(n&amp;lt;=1e5,元素大小&amp;lt;=70),从这个集合中选出若干元素使得这些元素的积为完全平方数,求方案数mod 1e9+7 做法 注意到元素非常的小,70以内的质数只有19个,那么我们想到状压dp,f[i][j]表示到第i个数,前面有质因子的集合是j的方案数,转移是O(2182182^{18}),状态是219∗n219∗n2^{19}*n的,会挂掉。...

Michael_Li的博客 450

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32系统架构与外设协同实战指南

嵌入式系统开发中,MCU的‘简介’远不止参数罗列,而是理解其硬件资源组织逻辑的起点。STM32作为主流Cortex-M微控制器,其核心价值在于高性能、低功耗、高集成与易开发的统一实现。这依赖于精心设计的总线矩阵、分域时钟树和存储器映射机制——它们共同构成外设协同的物理基础。从ADC通道切换到定时器捕获测频,从DWT微秒级时间戳到HAL库的跨系列移植能力,技术落地的关键始终是系统级认知而非孤立寄存器操作。本文聚焦真实工程场景,解析时钟使能、DMA联动、中断优先级、内存重映射等隐性知识,帮助开发者跨越‘能点亮L

weixin_33984032的博客 310

CF895C: Square Subsets && 【BZOJ2844】albus就是要第一个出场

CF895C: Square Subsets && 【BZOJ2844】albus就是要第一个出场 这两道题很类似,都是线性基的计数问题,解题的核心思想也一样。 CF895C Square Subsets 题目链接 题意 给定\(n\)个数,求多少种选数方案使得选出来的数乘积为完全平方数。\(n\leq 100000,a_i\leq70\)。 完全平方数的本质就是每个质因子的次数为...

weixin_34417200的博客 108

洛谷CF895C Square Subsets(线性基)

洛谷传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 题意: 给你n个数,每个数<=70,问有多少个集合,满足集合中所有数相乘是个完全平方数(空集除外) 题解: 完全看不出这玩意儿和线性基有什么关系……我可能太菜了…… 首先,一个完全平方数分解质因数之后每个质因子都出现偶数次 又因为小于等于$70$的质数总共18个,可以用18位的二进制表示,0表示偶数次,1表示奇数次 ...

weixin_33873846的博客 119

CF895C Square Subsets(状压+二项式定理优化)

传送门 由于完全平方数,是质因子分解后,每个质因子的质数都为偶数的数 707070以内只有191919个质因子,所以可以状压每个质因子的奇偶性质 f[i][j]f[i][j]f[i][j]表示考虑完第iii个数目前质因子奇偶性为jjj的方案数 然后暴力一点,枚举每个数,有转移方程,其中www是当前数字的状态 f[i][j⊕w]=f[i−1][j]f[i][j\oplus w]=f[i-1][j]f[i][j⊕w]=f[i−1][j] 第一维可以滚动掉,但是复杂度仍然是O(n2)O(n^2)O(n2) 发现相

jziwjxjd的博客 501

CF895C:C. Square Subsets(状压dp)

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

junior19的博客 553

CF 895C. Square Subsets DP(状压,平方数)

题意:给出长度为n的序列a,问序列a有多少个子集,其乘积为平方数. n 平方数其素因子的幂为偶数,70内有19个素因子 设状态为19位二进制 第i位为0表示 第i个素因子的幂为偶数. 1代表幂为奇数. 若一个一个加入数更新状态 则TLE  因为一个数加入偶数次和奇数次改变的状态是相同的  所以保存每个数的个数. 暴力更新状态即可 O( (1 #include using na

noone0的博客 410

CF895C Square Subsets (组合数+状压DP+简单数论)

题目大意:给你一个序列,你可以在序列中任选一个子序列,求子序列每一项的积是一个平方数的方案数。 1&lt;=a[i]&lt;=70 因为任何一个大于2的数都可以表示成几个质数的幂的乘积 所以我们预处理70以内的质数,把它作为二进制状压的状态,每个在序列中出现数Hash一下,组合数推一下 所以把奇次幂的状态表示为1,偶次幂的状态就是0,比如6就是11,42就是1011 而平方数的每个质因子...

guapisolo的博客 315
上一篇: poj 3469 Dual Core CPU
下一篇: cf 877D Olya and Energy Drinks
max_kibble
博客等级 码龄11年 2粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值