2022杭电多校 G - Shinobu loves trip
input:
2
3 2 1 1
1 1
2
5 4 3 2
1 4
4 3
2 100000
4
2
output:
1
2
1
题目大意:每组数据给出一个p代表国家数量,一个a,一个n代表目标旅行方案数,一个q代表询问个数,接下来n行每行给出一个s和d,s代表第i个目标旅行方案的初始国家,d代表第i个目标旅行方案的计划天数,假如当前所在城市为t,那么下一个所要去的城市就是(t*a)%p,对于每个询问,给出一个城市t,问n个目标旅行中有多少个目标会经过城市t。
解题思路:设当前询问经过的城市为x,当前所在点为st,对于每一个旅行方案分别判断st*a^j%p=x%p,0<=j<=d[i],对式子进行变形得到a^j%p=x*st^(-1)%p,这样我们可以先预处理出所有a^j%p,然后对于每个旅行方案求出temp=x*st^(-1)%p的值,但是我们怎么判断是否能在d[i]天之内到达x点呢?这就需要我们在预处理的时候记录一个mp[i],表示a^j%p=i的最小的j的值,也就是能到达点i所需要的最小天数,我们只需要判断temp<=mp[temp]即可。注意0没有逆元,所以当s[i]=0时要特别判断,即只有当询问的城市编号也是0的时候才会到达,否则永远不可能到达,这个题目的细节比较多,可以参考代码注意一下。
上代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int N=1010;
const int M=2e5+10;
long long pb[M],p,a,n,q,s[N],d[N],ni[N];
unordered_map<long long,int>mp;
long long ksm(long long a,long long b)
{long long res=1;while(b){if(b&1)res=res*a%p;b>>=1;a=a*a%p; }return res;
}
int main()
{std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int t;cin>>t;while(t--){mp.clear();cin>>p>>a>>n>>q;pb[0]=1;mp[1]=0;for(int i=1;i<=n;i++)cin>>s[i]>>d[i];long long tmp=p;for(int i=1;i<=M;i++){pb[i]=1ll*pb[i-1]*a%p;if(!mp.count(pb[i]))mp[pb[i]]=i;}p=tmp;for(int i=1;i<=n;i++)ni[i]=ksm(s[i],p-2);for(int i=1;i<=q;i++){long long x;cin>>x;long long ans=0;for(int j=1;j<=n;j++){if(s[j]==0){ans+=(x==s[j]);continue;}long long temp=x*ni[j]%p;if(mp.count(temp)&&mp[temp]<=d[j])ans++;}cout<<ans<<endl;}}return 0;
}
2022杭电多校 G - Shinobu loves trip相关推荐
- 2022杭电多校(十)
2022杭电多校(十) 文章目录 2022杭电多校(十) 一.比赛小结 二.题目分析及解法(基础题) 1001.Winner Prediction 1003.Wavy Tree 1004.Averag ...
- 2022杭电多校(二)
2022杭电多校(二) 文章目录 2022杭电多校(二) 一.比赛小结 二.题目分析及解法(基础题) 1001.Static Query on Tree 1002.C++ to Python 1003 ...
- 2022杭电多校(一)
2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...
- 2022杭电多校(五)
2022杭电多校(五) 文章目录 2022杭电多校(五) 一.比赛小结 二.题目分析及解法(基础题) 1003.Slipper 1006.BBQ 1007.Count Set 1010.Braggin ...
- 2022杭电多校(三)
2022杭电多校(三) 文章目录 2022杭电多校(三) 一.比赛小结 二.题目分析及解法(基础题) 1001.Equipment Upgrade 1002.Boss Rush 1003.Cyber ...
- 2022杭电多校赛第八场
2022杭电多校赛第八场 文章目录 2022杭电多校赛第八场 1004.Quel'Thalas 1001.Theramore 1011.Stormwind 1008.Orgrimmar 1005.Ir ...
- 2022杭电多校第八场题解
2022杭电多校第八场 Theramore(思维) 题意 给定一个01字符串,每次可以将一个奇数长度的区间翻转,求操作后字典序最小的字符串. 分析 翻转奇数长度的区间,元素位置的奇偶性不变,统计奇数位 ...
- 2022杭电多校(九)
2022杭电多校(九) 文章目录 2022杭电多校(九) 一.比赛小结 二.题目分析及解法(基础题) 1001.Arithmetic Subsequence 1003.Fast Bubble Sort ...
- 2022杭电多校(四)
2022杭电多校(四) 文章目录 2022杭电多校(四) 一.比赛小结 二.题目分析及解法(基础题) 1001.Link with Bracket Sequence II 1002.Link with ...
最新文章
- mysql数据库建仓范式_存mysql个数
- 多模人车交互,智能汽车的AI感知进化
- video标签 添加视频
- phpcms v9 index.php,【转】phpcms v9中tags列表页url用拼音作为路径的方法
- 2020年第十八届西电程序设计竞赛网络预选赛之Problem A 失败的在线考试
- linux plc编程软件,基于Linux平台的可编程控制器软PLC设计
- JS 浏览器扩展storage
- java中的随机生成算法_随机生成算法的java代码太复杂了
- 漫谈 Clustering (4): Spectral Clustering
- 南阳理工ACM 题目33 蛇形填数
- 电脑如何快速截屏技巧 四种常见的电脑截图方法
- 水经注地图发布服务中间件的适用范围
- 股票交易软件排行及简介
- 网页的背景颜色变化效果
- collect2: error: ld returned 1 exit status(解决方案大总结)
- IE无法打开网页的常见原因及解决
- java poi替换word_利用POI 技术动态替换word模板内容
- 【写作工具】用Katex打出常见矩阵
- 中国地图着色C语言实验报告,中国地图着色源代码
- 设计网页字体css,CSS样式设计网页字体与用户体验