挺简单的题目,但是有一堆恶心的边界

在刨去恶心的边界之后:

假定我们知道两边的循环节为b1,b2

其中h第一次到达目标的时间为a1,a2

又知道对于答案t

t=a1+b1*t1=a2+b2*t2

不妨枚举t1,判断是否存在可行解即可

又因为LCM(b1,b2)就开始循环了

且b1*b2<=b1*mod

所以我们枚举t1的范围在[0,mod]即可

如果在这个范围内无解,则一定无解

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long LL;
bool vis[1000010];
int mod,h,a,x,y;
int Go(int h,int x,int y){
memset(vis,0,sizeof(vis));
int cnt=0;
while(1){
if(vis[h])return -1;
vis[h]=1;
h=(1LL*h*x+y)%mod;
++cnt;
if(h==a)return cnt;
}
} int main(){
scanf("%d",&mod);
scanf("%d%d%d%d",&h,&a,&x,&y);
int a1=Go(h,x,y),b1=Go(a,x,y);
scanf("%d%d%d%d",&h,&a,&x,&y);
int a2=Go(h,x,y),b2=Go(a,x,y);
if(a1==-1||a2==-1){printf("-1\n");return 0;}
if(b1==-1&&b2==-1){
if(a1==a2)printf("%d\n",a1);
else printf("-1\n");
return 0;
}
if(b1!=-1&&b2!=-1){
for(int i=0;i<=mod;++i){
if(a1+1LL*b1*i>=a2&&(a1+1LL*b1*i-a2)%b2==0){
cout<<a1+1LL*b1*i<<endl;
return 0;
}
}printf("-1\n");
return 0;
}else{
if(b1==-1)swap(a1,a2),swap(b1,b2);
if(a2>=a1&&(a2-a1)%b1==0)printf("%d\n",a2);
else printf("-1\n");
}return 0;
}

  

codeforces #305 A Mike and Frog的更多相关文章

  1. codeforces #305 B Mike and Feet

    跟之前做过的51Nod的移数博弈是一样的QAQ 我们考虑每个数的贡献 定义其左边第一个比他小的数的位置为L 定义其右边第一个比他小的数的位置为R 这个可以用排序+链表 或者 单调队列 搞定 那么对于区 ...

  2. codeforces #305 D Mike and Fish

    正解貌似是大暴搜? 首先我们考虑这是一个二分图,建立网络流模型后很容易得出一个算法 S->行 容量为Num[X]/2; 行->列 容量为1 且要求(x,y)这个点存在 列->T 容量 ...

  3. codeforces #305 C Mike and Foam

    首先我们注意到ai<=50w 因为2*3*5*7*11*13*17=510510 所以其最多含有6个质因子 我们将每个数的贡献分离, 添加就等于加上了跟这个数相关的互素对 删除就等于减去了跟这个 ...

  4. codeforces #305 E Mike and friends

    原问题可以转化为:给定第k个字符串,求它在L-R的字符串里作为子串出现了多少次 定义子串为字符串的某个前缀的某个后缀(废话) 等价于我们把一个字符串插入到trie里,其过程中每个经过的节点和其向上的f ...

  5. 数论/暴力 Codeforces Round #305 (Div. 2) C. Mike and Frog

    题目传送门 /* 数论/暴力:找出第一次到a1,a2的次数,再找到完整周期p1,p2,然后以2*m为范围 t1,t2为各自起点开始“赛跑”,谁落后谁加一个周期,等到t1 == t2结束 详细解释:ht ...

  6. Codeforces Round #305 (Div. 1) A. Mike and Frog 暴力

     A. Mike and Frog Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/547/pr ...

  7. CF #305 (Div. 2) C. Mike and Frog(扩展欧几里得&&当然暴力is also no problem)

    C. Mike and Frog time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  8. Codeforces 547C/548E - Mike and Foam 题解

    目录 Codeforces 547C/548E - Mike and Foam 题解 前置芝士 - 容斥原理 题意 想法(口胡) 做法 程序 感谢 Codeforces 547C/548E - Mik ...

  9. codeforces 547A Mike and Frog

    近期都是这样的题呢. . .... 哎 開始想纯暴力(体如今跳出循环t>=那里.,,,)..,.随着数据变大.. ...(t=499981500166是能够的),,,..,,23333333 超 ...

随机推荐

  1. iOS开发——时间格式类

    目前只实现了三个类方法, 第一个获取当前时间,以字符创的形式返回,例如"201606161532" 第二个以当前时间与给定时间的时间差(秒) 第三个以当前时间与给定时间的时间差(分 ...

  2. C#编写以管理员身份运行的程序

    using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; names ...

  3. Hibernate 拥有 Mybits 的SQL/HQL特性 (注解、XML两不误)

        第一次写博客.文章有点渣,喜欢就看看,不喜欢路过点个赞.     效果:直接一条语句多种用法     FROM User A    WHERE    1=1    <#if id??&g ...

  4. c#跨窗体调用操作

    我知道的常用的有三种,以前记录的笔记: 1.通过构造函数实现 在form1的load事件中new form2时  在构造函数里添加一个参数 此参数就是form1类型的参数,同时记得在form2里重写构 ...

  5. cplusplus解析

    经常在头文件包含代码里面看到如下代码 #ifndef MAC_API_H #define MAC_API_H #ifdef __cplusplus extern "C"{ #end ...

  6. spring 计划任务:cron表达式

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分开工6或7个域,每一个域代表一个含义,Cron有如下两种语法 格式: Seconds Minutes Hours DayofMonth Mont ...

  7. NSS_02 日志配置

    采用log4net,使用系统推荐的最新版本:log4net-1.2.11-bin-newkey.zip(网址:http://logging.apache.org/log4net/download_lo ...

  8. 把div固定在网页顶部

    很多网站都有把某一块固定在顶部的功能,今天上网搜搜然后自己又写了一遍,贴出来给大家看看,哪天用到的时候自己也可以随时看看 <!DOCTYPE html PUBLIC "-//W3C// ...

  9. 如何保证写出来的程序没BUG

  10. phpcms v9修改栏目描述的多行文本为编辑器方法

    phpcms v9在添加栏目的时候,栏目描述为多行文本,无法满足有图片,以及格式的修改调整,那么仿站网今天告诉大家如何将他改为编辑器,方法如下 找到phpcms/moudles/admin/templ ...