[loj3330]猜数游戏
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 5005
4 #define mod 998244353
5 map<int,int>mat;
6 vector<int>v,v1[N],v2[N],v3[N];
7 int n,m,P,p,k,ans,a[N],ord[N],vis[N],dfn[N],sz[N],bl[N],dp[N];
8 int ksm(int n,int m,int p){
9 if (!m)return 1;
10 int s=ksm(n,m>>1,p);
11 s=1LL*s*s%p;
12 if (m&1)s=1LL*s*n%p;
13 return s;
14 }
15 int bsgs(int k){
16 int ans=1;
17 for(int i=0;i<v.size();i++)ans=ans*v[i];
18 for(int i=0;i<v.size();i++)
19 if (ksm(k,ans/v[i],P)==1)ans/=v[i];
20 return ans;
21 }
22 void add(int x,int y){
23 v1[x].push_back(y);
24 v2[y].push_back(x);
25 }
26 void dfs1(int k){
27 if (vis[k])return;
28 vis[k]=1;
29 for(int i=0;i<v1[k].size();i++)dfs1(v1[k][i]);
30 dfn[++dfn[0]]=k;
31 }
32 void dfs2(int k){
33 if (bl[k]){
34 if (bl[k]!=m)v3[m].push_back(bl[k]);
35 return;
36 }
37 sz[m]++;
38 bl[k]=m;
39 for(int i=0;i<v2[k].size();i++)dfs2(v2[k][i]);
40 }
41 void dfs3(int k,int x){
42 if (vis[k])return;
43 vis[k]=1;
44 dp[x]+=sz[k];
45 for(int i=0;i<v3[k].size();i++)dfs3(v3[k][i],x);
46 }
47 void init(){
48 p=P;
49 for(int i=3;i*i<=P;i++)
50 if (P%i==0){
51 p=i;
52 break;
53 }
54 for(int i=P;i>1;i/=p)k++;
55 int j=P/p*(p-1);
56 for(int i=2;i*i<=j;i++)
57 while (j%i==0){
58 j/=i;
59 v.push_back(i);
60 }
61 if (j>1)v.push_back(j);
62 }
63 void Kosaraju(){
64 memset(vis,0,sizeof(vis));
65 for(int i=1;i<=n;i++)dfs1(i);
66 for(int i=n;i;i--)
67 if (!bl[dfn[i]]){
68 m++;
69 dfs2(dfn[i]);
70 }
71 }
72 int main(){
73 scanf("%d%d",&n,&P);
74 init();
75 for(int i=1;i<=n;i++){
76 scanf("%d",&a[i]);
77 mat[a[i]]=i;
78 }
79 for(int i=1;i<=n;i++)
80 if (a[i]%p)ord[i]=bsgs(a[i]);
81 else{
82 for(int j=1,t=a[i];t>0;j++,t=1LL*t*a[i]%P)
83 if ((mat[t])&&(mat[t]!=i))add(i,mat[t]);
84 }
85 for(int i=1;i<=n;i++)
86 for(int j=1;j<=n;j++)
87 if ((i!=j)&&(ord[i])&&(ord[j])&&(ord[i]%ord[j]==0))add(i,j);
88 Kosaraju();
89 for(int i=1;i<=m;i++){
90 memset(vis,0,sizeof(vis));
91 dfs3(i,i);
92 }
93 for(int i=1;i<=n;i++)ans=(ans+(ksm(2,sz[i],mod)-1LL)*ksm(2,n-dp[i],mod))%mod;
94 printf("%d",ans);
95 return 0;
96 }
[loj3330]猜数游戏的更多相关文章
- 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)
1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...
- usaco 猜数游戏
Description 为了提高智商,锻炼思维能力,奶牛设计了一个猜数游戏.游戏开始前,贝西会在牛棚后面摆上N个数字.所有数字排成一条直线,按次序从1到N编号.每个数字在1到10^9之间,没有两个数字 ...
- (一)Python之猜数游戏
猜数游戏由简如深的编码学习过程: 3次机会: print('------------------我爱鱼C工作室------------------')count=0while count < 3 ...
- 猜数游戏-flag的运用
package my;import java.util.Scanner;public class MyJava { public static void main(String[] ar ...
- Java课程设计——猜数游戏(201521123111 陈伟泽)
Java课程设计--猜数游戏(201521123111 陈伟泽) 1.团队课程设计博客链接 博客作业--猜数游戏 2.个人负责模块或任务说明 Answer:一些基础界面的构造,排行榜的构造,用文件录入 ...
- JAVA课程设计 猜数游戏 团队
团队名称,成员介绍 名称: 猜数游戏 成员: 网络1514 201521123086 周颖强 网络1514 201521123087蒋勃超 项目git地址 git.oschina.net/jbc113 ...
- BZOJ 2222: [Cqoi2006]猜数游戏【神奇的做法,傻逼题,猜结论】
2222: [Cqoi2006]猜数游戏 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 604 Solved: 260[Submit][Status ...
- 从scratch到python——猜数游戏
` 之前讲解了从scratch到python,基于python turtle库的实现,讲解了用scratch和python turtle绘图的实现,以及让小猫动起来和当角色被单击的例子. 本节课讲继续 ...
- VBS猜数游戏
VBS 猜数游戏 2018-11-09 21:19:11 by xutao msgbox "The Swami" ,,"Game" msgbox " ...
随机推荐
- LinkedList-常用方法以及双向链表的理解
链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两 ...
- 论文解读(MPNN)Neural Message Passing for Quantum Chemistry
论文标题:DEEP GRAPH INFOMAX 论文方向: 论文来源:ICML 2017 论文链接:https://arxiv.org/abs/1704.01212 论文代码: 1 介绍 本文的目标 ...
- 2020.12.20-Codeforces Round #105补题
B - Escape The princess is going to escape the dragon's cave, and she needs to plan it carefully. Th ...
- Mysql双主双从高可用集群的搭建且与MyCat进行整合
1.概述 老话说的好:瞻前顾后.患得患失只会让我们失败,下定决心,干就完了. 言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只 ...
- Bloom Filter算法
Bloom Filter算法详解 什么是布隆过滤器 布隆过滤器(Bloom Filter)是 1970 年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数 (下面详细说),实际上你也可 ...
- 利用python爬取全国水雨情信息
分析 我们没有找到接口,所以打算利用selenium来爬取. 代码 import datetime import pandas as pd from bs4 import BeautifulSoup ...
- Framework - 性能统计
摘要 近期对接客户时,客户方希望提供 SDK 的性能.内存.隐私支持等一些数据,所以就对 SDK 进行了一些性能测试. 在用表格统计整理这些数据时,突然发现,经常用统计的方式看 SDK 的相关数据,似 ...
- 腾讯bugly产生bug定位行数不准解决方案
定位不准是因为做了混淆导致行数与实际代码行数不对.解决方案是要上传符号表.下载地址https://bugly.qq.com/v2/downloads 下载好因为我打开文件的说明文件是空文件(可能工作人 ...
- 【二食堂】Beta - Scrum Meeting 5
Scrum Meeting 5 例会时间:5.18 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 划词功能已经实现,继续开发,完善文本区域交互,调用API issue 1. ...
- 「总结」$dp1$
大概就是做点题. 先列一下要做的题目列表,从\(UOJ\)上找的. 129寿司晚宴 348州区划分 370滑稽树上滑稽果 457数树 22外星人 37主旋律 300吉夫特 196线段树 311积劳成疾 ...