题意与分析 (Codeforces 548C)

我开始以为是一条数学题,死活不知道怎么做,无奈看题解,才知这是一条暴力,思维江化了- -

题意大概是这样的:

两个东西的初始高度分别为h1,h2" role="presentation">h1,h2h1,h2,每秒二者的高度分别变化为(x1h1+y1)%m1" role="presentation">(x1h1+y1)%m1(x1h1+y1)%m1与(x2h2+y2)%m2" role="presentation">(x2h2+y2)%m2(x2h2+y2)%m2,问几秒后二者高度达到各自的目标a1,a2" role="presentation">a1,a2a1,a2,如果不能输出-1。

实际上我看了题解还是不能明白为什么迭代2m" role="presentation">2m2m次,或者说2*…这个变量为什么是m。2这个系数能够理解,我们需要找出循环节;但是为什么是m看了半天还是不能明白。我去看看扩展gcd算法的相关题目来找找思路。

总而言之,迭代这么多次,如果他们不能达到各自的目标输出-1。否则一定有解。我们前面的系数2保证了至少能达到2次a" role="presentation">aa,然后找到其中的周期,之后暴力跑一段(取一个很大的数字,我这里有可能被hack),看能不能达到一致即可。

不能输出-1。

总而言之,这是用到了数学结论、披着数学外衣、但是本质是暴力的一道题目。希望自己能够将暴力和数学融会贯通。

代码

#include <bits/stdc++.h>
#define MP make_pair
#define PB push_back
#define fi first
#define se second
#define ZERO(x) memset((x), 0, sizeof(x))
#define ALL(x) (x).begin(),(x).end()
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)
#define QUICKIO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
using namespace std;
using ll = long long;
using ull = unsigned long long;
using pi = pair<int,int>;
const int MAXN=500;
// After reading the editorial. int main()
{
QUICKIO
ll m,h1,a1,x1,y1,h2,a2,x2,y2;
cin>>m>>h1>>a1>>x1>>y1>>h2>>a2>>x2>>y2;
ll start1=h1,start2=h2;
vector<ll> time1,time2;
rep(i,0,2*m) // why 2*m? we need a zhouqi!
{
if(start1==a1)
time1.PB(i);
if(start2==a2)
time2.PB(i);
start1=(start1*x1+y1)%m;
start2=(start2*x2+y2)%m;
}
if(time1.size()==0 || time2.size()==0)
{
cout<<"-1"<<endl;
return 0;
}
ll period1=time1[1]-time1[0],
period2=time2[1]-time2[0],
go1=time1[0],
go2=time2[0];
//cout<<period1<<" "<<period2<<" "<<go1<<" "<<go2<<endl;
rep(i,1,2*m) // I dont know why 2m O_O
{
if(go1==go2)
{
cout<<go1<<endl;
return 0;
}
if(go1<go2)
go1+=period1;
else go2+=period2;
}
cout<<-1<<endl;
return 0;
}

「日常训练」 Mike and Frog (CFR305D2C)的更多相关文章

  1. 「日常训练」 Mike and Fun (CFR305D2B)

    题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...

  2. 「日常训练」Mike and Feet(Codeforces Round #305 Div. 2 D)

    题意 (Codeforces 548D) 对一个有$n$个数的数列,我们要求其连续$x(1\le x\le n)$(对于每个$x$,这样的连续group有若干个)的最小数的最大值. 分析 这是一道用了 ...

  3. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  4. 「日常训练」 Fire!(UVA-11624)

    与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...

  5. 「日常训练」COMMON 约数研究(HYSBZ-1968)

    题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...

  6. 「日常训练」「小专题·图论」 Frogger (1-1)

    题意 分析 变形的dijkstra. 分析题意之后补充. 代码 // Origin: // Theme: Graph Theory (Basic) // Date: 080518 // Author: ...

  7. 「日常训练」Single-use Stones (CFR476D2D)

    题意(Codeforces 965D) $w$表示河的宽度,$l$表示青蛙所能跳的最远的距离,第二行的$w-1$个元素表示离河岸为$i$的地方有$a[i]$个石头,一个石头被踩两次,问最多有多少只青蛙 ...

  8. 「日常训练」Common Subexpression Elimination(UVa-12219)

    今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...

  9. 「日常训练」Magic Stones(CodeForces-1110E)

    题意 给定两个数组c和t,可以对c数组中的任何元素变换\(c_i\)​成\(c_{i+1}+c_{i-1}-c_i\)​,问c数组在若干次变换后能否变换成t数组. 分析 这种魔法题目我是同样的没做过. ...

随机推荐

  1. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace【树状数组维护区间最大值】

    任意门:https://nanti.jisuanke.com/t/31459 There's a beach in the first quadrant. And from time to time, ...

  2. GreenPlum 与hadoop什么关系?(转)

    没关系. gp 可以处理大量数据, hadoop 可以处理海量. gp 只能处理湖量,或者河量. 无法处理海量. 作者:SallyLeo链接:https://www.zhihu.com/questio ...

  3. SpringBoot 使用(三): 配置文件详解

    代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境的配置都不一样,同时要方便各种角色如运维,接口测试, 功能测试,全链路测试的配置,hardcode 肯定不合适,如S ...

  4. js学习笔记-数字转罗马数字

    function convert(num) {     var ans = "";     var k = Math.floor(num / 1000);     var h = ...

  5. Android学习笔记_30_常用控件使用

    一.状态栏通知(Notification): 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息.发送消息的代码如下: public void sendNotice(View v){ int ic ...

  6. SQL数据完整性

    1.数据的完整性 1. 什么是数据的完整性 保证用户输入的数据保存到数据库中是正确的 2.添加数据完整性 在创建表的时候给表添加约束 3.完整性分类 实体完整性.域完整性.引用完整性 ​ ​ 2.完整 ...

  7. MVC5 数据注解和验证

    ①利用数据注解进行验证 ②创建自定义的验证逻辑 ③模型元数据注解的用法 ①先创建数据源 1,创建我们的Model  Order 2,创建控制器带EF 选择模型为Order 当你运行的时候会报错,需要代 ...

  8. C#中Math.Round()的中国式用法

    C#中的Math.Round()并不是使用的"四舍五入"法.而是(银行家算法),即:四舍六入五取偶.事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法. ...

  9. MySQL的数据类型(二)

    MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异.以5.0版本为例,MySQL包括了CHAR.VARCHAR.BINARY.VARBINARY.BLOB.TEXT等多种字符串类型. ...

  10. ref、refs使用的注意事项

    ref是被用来给元素或子组件注册引用信息.引用信息将注册在父组件的 $refs 对象身上.如果在普通的DOM元素身上使用,引用指向就是DOM元素:如果用在子组件身上,引用就是指向组件实例. 当v-fo ...