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

单反相机物镜设计[DG-10] REAR(要打在像面,操作数要找像面对应位置15):以透镜单位表示的真实光线径向坐标,波长由Wave定义,参见“Hx、Hy、Px和Py”。最小玻璃厚度最小不能小于semi-dia的1/10,要根据layout看有没有过厚过薄,反复调节。PROD:两个操作数的乘积(操作#1 X操作#2)。3x4就是57.3x0.41=23.5。拦光一般在第一面和最后一面操作,减少边缘无用光线。光阑面与镜面贴近,要调距离,同时设置光阑像差。后截距是指从镜头后表面到焦点的距离。CONS:弧度转为角度。镜头相互嵌入,有错误。 阅读详情

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;
}
Python爬取谷歌学术全攻略:基于Playwright与Asyncio的高效、抗反爬虫实践 同时,文章将详细解析爬虫过程中可能遇到的各种挑战,如IP封锁、验证码、动态内容加载等,并提供切实可行的解决方案。self.logger.info(f"第 {current_page} 页解析完成,共找到 {len(page_results)} 条结果。:谷歌学术的HTML结构并非一成不变,其CSS类名和标签结构可能会发生变化,且不同地区、不同语言的界面可能存在差异,增加了数据解析的难度。self.logger.info(f"开始搜索关键词: '{keyword}',计划爬取 {max_pages} 页") 阅读详情

相关推荐

高效打卡系统设计:从行为心理学到实践工具

打卡系统作为现代时间管理的重要工具,其核心原理植根于行为心理学中的即时反馈机制和习惯养成理论。通过科学设计的打卡周期和可视化反馈,能有效提升个人自律性和目标达成率。在技术实现上,从纸质记录到数字化工具(如Notion、Excel自动化模板)的演进,为不同场景提供了灵活解决方案。特别在习惯追踪和进度管理领域,结合热力图生成、数据统计等技巧,打卡系统能转化为强大的自我监督工具。本文通过实践案例,详解如何构建兼顾弹性和约束力的个性化打卡方案,帮助读者突破'三天打鱼两天晒网'的常见困境。

weixin_30047059的博客 337

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

Unity Acceleratorc与Cache Server unity的缓存服务器

文章目录1.作用概述2.用法(使用,看这个就够了)服务端下载部署Unity Acceleratorc修改http管理端口修改Editor连接端口客户端使用(设置好一次提交设置,团队拉取即可全部生效)3.测试平台切换测试资源导入测试(打开编辑器的情况下)项目启动测试(不打开编辑器的情况下)4.不同版本表现5.服务端监控6.服务端缓存7.冲突8.预警9.不同项目/不同配置-同种资源10.缓存清除 1.作用概述 编辑器模式下,导入资源,切换平台unity都会重新识别资源,大型项目很浪费时间,使用Cache Ser

euphorias的博客 3812

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

BH1750光强度传感器Stm32f103驱动(已测试ok)

1. 实验:Stm32f103 驱动 bh1750采集光照强度,串口打印采集到的数据。 2. 实验准备器材 开发版:stm32f103c8t6 器件:bh1750 GY-302 开发环境:win10,KILE4 下载程序的软件:FlyMcu.exe 串口调试助手:ComAssistant.exe 3. BH1750 的接线 VCC:5V或3.3V ...

weixin_53329977的博客 8928

超实用!VS Code配置C/C++开发环境全攻略

本文提供了一份详细的VS Code配置C/C++开发环境全攻略。从MinGW-w64编译器的选择与安装,到VS Code核心扩展的配置,再到tasks.json构建任务与launch.json调试环境的设置,手把手指导初学者完成从环境搭建到高效开发与调试的全过程,帮助开发者快速上手C/C++项目。

weixin_28829479的博客 185

C. Square Subsets

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

WeYoungg的博客 564

SMART200如何实现多次调用子程序带定时器功能

1、西门子200PLC的子程序由于很多限制条件,如果希望建立一个可以多次调用的子程序,那么这个子程序里是不能含有定时器指令的,所以我们只能退而求其次了。建议将沿指令(上升沿、下降沿)放在多次调用子程序的外面。 2、可以提供不同的时基,提供不同时间的定时 3、实现秒定时 5、子程序内部: STL代码: 1、时基信号由外部提供、 可以提供不同的时基信号 2、实现循环定时开关 LD #Start:L0....

RXXW_Dor的博客 1万+

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

输入过欠压保护电路分析

输入过欠压保护电路仿真分析

HW-BASE的博客 6906

CLASSB类移植(满足IEC 60730-1和60355-1标准)

针对软件认证需要满足IEC 60730-1和60335-1标准,ST公司专门提供的软件扩展包X-CUBE-CLASSB,它包含自测库和文档,支持多种STM32系列芯片,通过预集成测试库和标准化流程,帮助开发者快速满足国际安全标准,适用于家电、工业控制等高可靠性场景。ClassB软件包程序检测内容分为两个主要部分:启动时的自检和运行时的周期自检,MCU在上电的时候会进行复位启动,在启动完成以后会进行运行自检。

m0_61973119的博客 1402

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

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

mumei的博客 376

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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、付费专栏及课程。

余额充值