题意:
有T组样例,一共n个人传球,从1号开始最后回到1号,给定方案数,求最小的传球次数。(t<=100,n<=1e6,方案数<=998244353)

思路:
考虑推柿子 。 f[i]代表从1号开始传了i次回到1号的方案数,
f[i]=(n-2)*f[i-1]+(n-1)*f[i-2],这里考虑两种情况*,第i-1个人如果是1号人员和不是1号人员,如果是一号人员,那么情况就是第i个人选择有(n-1)种,除了1号 。 还有一种如果不是一号,那么第i个人有(n-2)种选法(和左右两边的人都不相等)。然后通过特征方程来求得
f(t)=((n-1)^t+(n-1)*(-1)^t)/n=x (mod 998244353).通过移项变成指数形式,可恶的是这个(-1)的n次的怎么处理呢,这里我们可以分成两种情况,一种是奇数,一种是偶数,公差都是原来a的平方,循环节还是同一个。记录两个的最小值最后取min就行了。ps:杭电卡hashmap,这里我们手写两个hashmap,能快将近8,9倍。*
O(T*sqrt(n)*log(n))
code:

#include<iostream>
#include<cmath>
#include<unordered_map>
#include<cstring>
using namespace std;
const int mod=998244353;
typedef long long ll;
const int  N=100007;
//#define int long long
int mp2[N],mp[N];
int mpans[N],mpans2[N];
int qmi(int a,int b)
{int res=1;while(b){if(b&1)    res=1ll*res*a%mod;b>>=1;a=1ll*a*a%mod;}return res;
}
int find(int h[],int x)
{int d=(x%N+N)%N;while(h[d]!=0x3f3f3f3f && h[d]!=x){d++;if(d==N)d=0;}return d;
}
int bsgs(int a,int b,int p)
{// unordered_map<int,int>mp,mp2;int f1=(b-1+mod)%mod;//奇数int f2=(b+1)%mod;//偶数// cout<<f1<<" "<<f2<<endl;int k=sqrt(p)+1;int kt= 1ll*a*a%mod;int ak=1;
//  cout<<"k="<<k<<endl;for(int i=0,j1=1ll*f1*a%mod,j2=f2;i<=k-1;i++){int t;mp[t=find(mp,j1)]=j1;mpans[t]=i;j1=1ll*j1*kt%mod;mp2[t=find(mp2,j2)]=j2;mpans2[t]=i;j2=1ll*j2*kt%mod;ak=1ll*ak*kt%mod;//cout<<j1<<" "<<j2<<endl;}int ans=2e9;for(int i=1,j=ak;i<=k;i++){//cout<<i*k<<endl;int t;if(mp[t=find(mp,j)]==j)    ans=min(2*(i*k-mpans[t=find(mp,j)]),ans);if(mp2[t=find(mp2,j)]==j) ans=min(ans,2*(i*k-mpans2[t=find(mp2,j)])+1);j=1ll*j*ak%mod;}if(ans==2e9) return -1;return ans;}
signed main()
{ios::sync_with_stdio(0);int t;cin>>t;while(t--){memset(mp,0x3f,sizeof mp);memset(mp2,0x3f,sizeof mp2);int n,x;cin >> n >> x;if(x==1){cout<<0<<endl;continue;   }if(x==0){cout<<1<<endl;continue;}x=1ll*n*x%mod*qmi(n-1,mod-2)%mod;cout<<bsgs((n-1+mod)%mod,x,mod)<<endl;}return 0;
}

Pass! (bsgs 推柿子)相关推荐

  1. P4165 [SCOI2007]组队 推柿子+差分

    题意: 题意 分析: 推柿子 : A × h − A × m i n h + B × s − B × m i n s ≤ C A\times h-A\times min_h+B\times s-B\t ...

  2. SP5971 LCMSUM - LCM Sum(莫比乌斯反演 ,推柿子,经典)

    整理的算法模板合集: ACM模板 题目传动门 #include <iostream> #include <cstdio> #include <algorithm> ...

  3. 另类推柿子 Crypto Lights

    Crypto Lights 大意: 有 n 个台灯初始时都是暗的,每次等概率随机一个暗台灯将其点亮,若点亮后存在一个长度为 k 的连续段有大于一个台灯被点亮则立刻停止,求期望点亮多少台灯.答案对1e9 ...

  4. 2019 ACM - ICPC 全国邀请赛(西安)题解(9 / 13)

    The 2019 ACM-ICPC China Shannxi Provincial Programming Contest 目录 The 2019 ACM-ICPC China Shannxi Pr ...

  5. 暑假集训考试反思+其它乱写

    7.20 Sat 下午返校 回来改题 sdfz的巨佬觉得线上虐人不够爽,所以他们过来了 改T2的时候发现一个问题 如果要用$i$和$i\ xor\ 1$表示相邻的两条边,链式前向星tot初值必须设为1 ...

  6. NLP经典算法复现!CRF原理及实现代码

    Datawhale 作者:丁媛媛,Datawhale优秀学习者 寄语:本文先对马尔可夫过程及隐马尔可夫算法进行了简单的介绍:然后,对条件随机场的定义及其三种形式进行了详细推导:最后,介绍了条件随机场的 ...

  7. LOJ#2085 循环之美

    解:首先看这个纯循环到底是什么玩意..... 经过一番打表,发现纯循环小数就是分母与进制互质的既约分数. 1 #include <bits/stdc++.h> 2 3 std::bitse ...

  8. 经典算法复现!(条件随机场)CRF原理及实现代码

    Datawhale 作者:丁媛媛,Datawhale优秀学习者 寄语:本文先对马尔可夫过程及隐马尔可夫算法进行了简单的介绍:然后,对条件随机场的定义及其三种形式进行了详细推导:最后,介绍了条件随机场的 ...

  9. P3746 [六省联考 2017] 组合数问题(倍增、dp)

    解析 再次被"组合数问题"吊打qwq 和上一次不一样的是,这次更加被恶心到了. 一方面受上一个组合数问题影响,另外出题人也十分阴间,一开始还给了个组合数的公式,更加使我坚定的认为这 ...

最新文章

  1. python安装不了jieba_python安装jieba失败怎么办?_后端开发
  2. linux查看时间同步服务,Linux系统时钟同步服务NTPD配置方法
  3. SAP WebIDE 里的 neo-app.json 文件用途
  4. 算法题指南书_分类算法指南
  5. [Magento error] The url is not accessible, unable to read response
  6. C# 3.0 新特性
  7. Linux常用指令---netstat(网络端口)
  8. 教育部成立校外教育培训监管司 K12迎最强监管 教育中概股再跳水
  9. Python 爬取 3000 部电影,最具人气烂片排行榜出炉!
  10. 【Win 10 应用开发】在App所在的进程中执行后台任务
  11. [LeetCode]319. Bulb Switcher灯泡开关
  12. 开通微信小程序直播的条件有哪些?开直播要做什么准备?
  13. ionic4升级到ionic5踩坑记录
  14. 总结VS下opencv无法正常显示图片的几种问题及其解决方案
  15. RTL8188CUS 无线网卡使用说明
  16. Android应用权限大全(Manifest.permission)
  17. 零基础教程-如何快速将EXCEL表格数据拆分成多个文件
  18. 图数据库OrientDB-基础篇
  19. 求组合数(不同类型的组合数C++)
  20. PyGmae:有限状态机实践(十二)

热门文章

  1. IOS 之FishHook原理及例子
  2. 旋转编码器的原理和使用方法
  3. ARM 嵌入式系统开发 - 软件设计与优化
  4. layaari2-cmd 踩坑记录,解决安装失败问题
  5. BUUCTF之“judgement_mna_2016”
  6. amoled led 排列_AMOLED屏幕为啥不用RGB排列?
  7. jam 掘金study_召唤队友 ing!机器学习 Study Jam 第二季课程现已开放
  8. 使用CRM客户关系管理系统的好处有哪些?
  9. 【电路_音频】一些关于音频功放的小秘密,你都知道吗?
  10. CodeForces 597 A. Divisibility(坑,满满的都是坑)