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相关推荐

  1. 2022杭电多校(十)

    2022杭电多校(十) 文章目录 2022杭电多校(十) 一.比赛小结 二.题目分析及解法(基础题) 1001.Winner Prediction 1003.Wavy Tree 1004.Averag ...

  2. 2022杭电多校(二)

    2022杭电多校(二) 文章目录 2022杭电多校(二) 一.比赛小结 二.题目分析及解法(基础题) 1001.Static Query on Tree 1002.C++ to Python 1003 ...

  3. 2022杭电多校(一)

    2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...

  4. 2022杭电多校(五)

    2022杭电多校(五) 文章目录 2022杭电多校(五) 一.比赛小结 二.题目分析及解法(基础题) 1003.Slipper 1006.BBQ 1007.Count Set 1010.Braggin ...

  5. 2022杭电多校(三)

    2022杭电多校(三) 文章目录 2022杭电多校(三) 一.比赛小结 二.题目分析及解法(基础题) 1001.Equipment Upgrade 1002.Boss Rush 1003.Cyber ...

  6. 2022杭电多校赛第八场

    2022杭电多校赛第八场 文章目录 2022杭电多校赛第八场 1004.Quel'Thalas 1001.Theramore 1011.Stormwind 1008.Orgrimmar 1005.Ir ...

  7. 2022杭电多校第八场题解

    2022杭电多校第八场 Theramore(思维) 题意 给定一个01字符串,每次可以将一个奇数长度的区间翻转,求操作后字典序最小的字符串. 分析 翻转奇数长度的区间,元素位置的奇偶性不变,统计奇数位 ...

  8. 2022杭电多校(九)

    2022杭电多校(九) 文章目录 2022杭电多校(九) 一.比赛小结 二.题目分析及解法(基础题) 1001.Arithmetic Subsequence 1003.Fast Bubble Sort ...

  9. 2022杭电多校(四)

    2022杭电多校(四) 文章目录 2022杭电多校(四) 一.比赛小结 二.题目分析及解法(基础题) 1001.Link with Bracket Sequence II 1002.Link with ...

最新文章

  1. mysql数据库建仓范式_存mysql个数
  2. 多模人车交互,智能汽车的AI感知进化
  3. video标签 添加视频
  4. phpcms v9 index.php,【转】phpcms v9中tags列表页url用拼音作为路径的方法
  5. 2020年第十八届西电程序设计竞赛网络预选赛之Problem A 失败的在线考试
  6. linux plc编程软件,基于Linux平台的可编程控制器软PLC设计
  7. JS 浏览器扩展storage
  8. java中的随机生成算法_随机生成算法的java代码太复杂了
  9. 漫谈 Clustering (4): Spectral Clustering
  10. 南阳理工ACM 题目33 蛇形填数
  11. 电脑如何快速截屏技巧 四种常见的电脑截图方法
  12. 水经注地图发布服务中间件的适用范围
  13. 股票交易软件排行及简介
  14. 网页的背景颜色变化效果
  15. collect2: error: ld returned 1 exit status(解决方案大总结)
  16. IE无法打开网页的常见原因及解决
  17. java poi替换word_利用POI 技术动态替换word模板内容
  18. 【写作工具】用Katex打出常见矩阵
  19. 中国地图着色C语言实验报告,中国地图着色源代码
  20. 设计网页字体css,CSS样式设计网页字体与用户体验

热门文章

  1. 康耐视Visionpro-QuickBuild Tools 使用教程
  2. idea设置中文版(详细)
  3. Ubuntu实用工具安装(不断更新)
  4. .NET C# IOS内购支付功能
  5. 拉萨——哲蚌寺(一)
  6. 事务的ACID特性及概念
  7. JS笔记之--Javascript的取整、取商、取模、取余
  8. 论文阅读:大型对抗性不完美信息博弈的均衡发现 AAAI/ACM SIGAI Best Paper
  9. C#本地时间和GMT(UTC)时间的转换
  10. python路径单双斜杠、转义字符