T1 x

求出每个数的质因数,并查集维护因子相同的数,最后看一共有多少个联通块,$ans=2^{cnt}-2$

但是直接分解会$T$,埃筛是个很好的选择,或者利用每个数最多只会有1个大于$\sqrt{n}$的质因子,线筛$1e6$内的素数,每次只需枚举$1e3$的质因数就行,复杂度也可以过去

#include<iostream>
#include<cstdio>
#include<bitset>
#include<cmath>
#include<cstring>
#include<vector>
#define ll long long
#define mod 1000000007
using namespace std;
ll T,n,ans,a[100100],prime[100100],fa[100100],num,pr[1001000],tot;
bitset<100100>vis;
bitset<1001000>v;
vector<int>ve[1001000];
ll read()
{ll aa=0,bb=1;char cc=getchar();while(cc>'9'||cc<'0'){if(cc=='-') bb=-1;cc=getchar();}while(cc>='0'&&cc<='9'){aa=(aa<<3)+(aa<<1)+(cc^'0');cc=getchar();}return aa*bb;
}
ll quick(ll x,ll p)
{ll as=1;while(p){if(p&1) as=as*x%mod;x=x*x%mod;p>>=1;}return as;
}
ll find(ll x)
{if(x!=fa[x]) fa[x]=find(fa[x]);return fa[x];
}
void init()
{for(int i=2;i<=1000000;i++){if(v[i]) continue;prime[++tot]=i;for(int j=i;j<=1000000;j+=i){v[j]=1;ve[j].push_back(i);}}
}
int main()
{T=read();init();while(T--){n=read();ans=0;num=0;vis.reset();memset(pr,0,sizeof(pr));for(int i=1;i<=n;i++) a[i]=read(),fa[i]=i;for(int i=1;i<=n;i++){for(int j=0;j<ve[a[i]].size();j++){if(pr[ve[a[i]][j]]) fa[find(i)]=find(pr[ve[a[i]][j]]);else pr[ve[a[i]][j]]=i;}}for(int i=1;i<=n;i++){int f=find(i);if(!vis[f]) vis[f]=1,num++;}ans=(quick(2,num)-2+mod)%mod;printf("%lld\n",ans);}return 0;
}

x

T2 y

$bitset$的灵活应用

一开始的思路是$2^{20}$枚举状态,记忆化搜索,$f[i][sta]$表示从i点出发能否走出$sta$的状态(状态的第一位表示长度),但是空间开不下,时间也扛不住

所以改变策略,只记录一半的状态,最后枚举中间点

$f[i][sta][j]$表示起点为$i$,终点为$j$,中间为状态$sta$是否可行

正常需要枚举一个点,一个状态,然后在枚举一个点,再枚举与第二个点有边相连的点,如果前两个点之间的$sta$状态可行,那么第一个点与第三个点之间$sta<<1|h[i].w$也是可行的

但是,时间显然不优秀

$bitset$就有用了,如果两个点之间的$sta$状态是可行的,那么第一个点与这个状态的终点和第二个点的连边是一样的,所以建边的时候用$bitset$邻接表,再加一维表示是$0$还是$1$,$bitset$合并就行,最后只需要枚举状态和中点,看是否能拼成这个状态

还有就是要在每个状态的第一位表示长度,不然$01$和$001$状态是分不清的。对于$01$串为奇数的要处理好$len/2$与$len/2+1$两个长度的关系

#include<iostream>
#include<cstdio>
#include<cstring>
#include<bitset>
using namespace std;
int n,m,d,ans;
bitset<99>f[99][(1<<12)+5],bt[2][99];
int read()
{int aa=0,bb=1;char cc=getchar();while(cc>'9'||cc<'0'){if(cc=='-') bb=-1;cc=getchar();}while(cc>='0'&&cc<='9'){aa=(aa<<3)+(aa<<1)+(cc^'0');cc=getchar();}return aa*bb;
}
int main()
{n=read();m=read();d=read();int dd=d/2,dis=d-dd;int u,v,c;for(int i=1;i<=m;i++){u=read();v=read();c=read();bt[c][u][v]=1;bt[c][v][u]=1;f[u][c|2][v]=1;f[v][c|2][u]=1;}for(int i=1;i<=n;i++){for(int sta=2;sta<(1<<(dis+1));sta++){for(int j=1;j<=n;j++){if(!f[i][sta][j]) continue;f[i][sta<<1|1]|=bt[1][j];f[i][sta<<1|0]|=bt[0][j];}}}for(int i=0;i<(1<<d);i++){bool flag=0;for(int j=1;j<=n;j++){if(f[1][i>>dd|(1<<dis)][j]&&f[j][i&((1<<dd)-1)|(1<<dd)].count()){flag=1;break;}}if(!flag&&dd!=dis){for(int j=1;j<=n;j++){if(f[1][i>>dis|(1<<dd)][j]&&f[j][i&((1<<dis)-1)|(1<<dis)].count()){flag=1;break;}}}ans+=flag;}printf("%d\n",ans);return 0;
}

y

T3 z

咕了

不想退役就应该踏实

转载于:https://www.cnblogs.com/jrf123/p/11611362.html

9.28 csp-s模拟测试54 x+y+z相关推荐

  1. csp-s模拟测试54 - 55

    两天炸掉了135分 csp-s模拟测试54 期望得分:100+72+45 实际得分:100+21+31 T2有重边,关于邻接矩阵,它死了TAT,挂了记忆化搜索-39. 然后判c=0想到了1点没度,然而 ...

  2. 合肥信息技术职业学院计算机模拟考试准考证,【通知】全国计算机等级考试模拟测试通知...

    原标题:[通知]全国计算机等级考试模拟测试通知 全国计算机等级考试模拟测试来了 这里有小塔的秘密笔记哟 全国计算机等级考试模拟测试 1 模拟测试地点 16号教学楼2楼 2 模拟测试的安排 时间 地点 ...

  3. Mock 模拟测试简介及 Mockito 使用入门

    Mock 是什么 mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象.mock对象就是真实对象在调试期间的 ...

  4. 2018冬令营模拟测试赛(十八)

    2018冬令营模拟测试赛(十八) [Problem A]Table 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述&qu ...

  5. 2018冬令营模拟测试赛(九)

    2018冬令营模拟测试赛(九) [Problem A]王子 试题描述 不是所有王子都会遇见自己的中关村,主公,公主. 从前有个王子姓王,王王子遇到了一位美丽的公主,她的名字当然是公公主啦. 王王子对公 ...

  6. Mockito:一个强大的用于Java开发的模拟测试框架

    介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...

  7. WebRTC通话质量调优:三个弱网模拟测试工具的使用与对比

    作为一个使用 WebRTC 独立开发者或团队,怎样才能知道自己 App 的通话质量已经"达标"了呢?如何进行合理的弱网模拟测试?介绍给开发者们三个开源工具的部署.使用方法,及其各自 ...

  8. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  9. 测试http请求的Chrome插件:Postman插件的查找安装模拟测试 - 讲解篇

    一个测试http请求的Chrome插件:Postman 本文简述一下这个Chrome插件:Postman插件的查找.下载.安装. 这里需要合法的VPN服务商,具体原因你懂的. Chrome资源查找下载 ...

最新文章

  1. Docker容器入门-基本命令的使用
  2. Unix/Linux常用命令及配置
  3. Effective Java读书笔记六:方法
  4. 电信运营商计费模型_商客通:南京电信400电话怎么办理更省心
  5. 互联网协议套件(TCP/IP)及七层OSI模型
  6. 老司机实战Windows Server Docker:1 初体验之各种填坑
  7. java面试 数据库连接池_阿里面试官:数据库连接池有必要吗?你对它的底层实现了解过没?...
  8. php函数传引用,关于php:函数调用通过引用传递?
  9. 学习笔记(2)centos7 下安装mysql
  10. WebSockets与服务器发送的事件/ EventSource
  11. mysql 储存过程放到哪_MySQL储存过程
  12. VScode单步跟踪Nginx(虚拟机中搭建Nginx)源码
  13. 吉林大学计算机专业张文政,张晋东 - 吉林大学 - 计算机科学与技术学院
  14. 百度商业推广php,百度“知心搜索”,背后商业协议
  15. FPGA MCU FSMC通信接口——NAND Flash模式
  16. 学者该如何快速入门Python?内附十年Python程序员详细学习攻略
  17. ZT 计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48
  18. 如何写好一份解决方案?
  19. 效能大提升!百度与英特尔携手开拉新Nervana NNP芯片
  20. yum 私有仓库搭建

热门文章

  1. 数据库设计的范式规范
  2. block相对于delegate有哪些优缺点?
  3. CentOS 6.3下配置LVM(逻辑卷管理)
  4. 我国.NET域名注册总量超57.3万 6月新增6747个
  5. LeetCode8. 字符串转换整数 (atoi)
  6. 虚拟化技术、云计算服务模式、Docker安装
  7. python改变数组元素排序
  8. 递归下降分析器的设计java_数据结构(Java版)教与学(48和60学时教学大纲)
  9. python爬虫网站简单_Python爬虫之简单爬虫框架实现
  10. 数据挖掘:围绕 统计与概率、分类与聚类、检索方法 ,原理演示或应用程序