「日常训练」 Mike and Frog (CFR305D2C)
题意与分析 (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)的更多相关文章
- 「日常训练」 Mike and Fun (CFR305D2B)
题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...
- 「日常训练」Mike and Feet(Codeforces Round #305 Div. 2 D)
题意 (Codeforces 548D) 对一个有$n$个数的数列,我们要求其连续$x(1\le x\le n)$(对于每个$x$,这样的连续group有若干个)的最小数的最大值. 分析 这是一道用了 ...
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- 「日常训练」 Fire!(UVA-11624)
与其说是训练不如说是重温.重新写了Java版本的代码. import java.util.*; import java.math.*; import java.io.BufferedInputStre ...
- 「日常训练」COMMON 约数研究(HYSBZ-1968)
题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...
- 「日常训练」「小专题·图论」 Frogger (1-1)
题意 分析 变形的dijkstra. 分析题意之后补充. 代码 // Origin: // Theme: Graph Theory (Basic) // Date: 080518 // Author: ...
- 「日常训练」Single-use Stones (CFR476D2D)
题意(Codeforces 965D) $w$表示河的宽度,$l$表示青蛙所能跳的最远的距离,第二行的$w-1$个元素表示离河岸为$i$的地方有$a[i]$个石头,一个石头被踩两次,问最多有多少只青蛙 ...
- 「日常训练」Common Subexpression Elimination(UVa-12219)
今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...
- 「日常训练」Magic Stones(CodeForces-1110E)
题意 给定两个数组c和t,可以对c数组中的任何元素变换\(c_i\)成\(c_{i+1}+c_{i-1}-c_i\),问c数组在若干次变换后能否变换成t数组. 分析 这种魔法题目我是同样的没做过. ...
随机推荐
- GroundPlaneEstimator.cpp解读
GroundPlaneEstimator域下的compute函数,就相当于整个cpp的主函数,也体现了整个调用过程,先执行compute_v_disparity_data,再compute_v_dis ...
- HTML中什么时候加px
如:<img width="800" height="600" src="#"/> 不加后面的px; #center{ ...
- 【洛谷P1196】[NOI2002]银河英雄传说
银河英雄传说 题目链接 并查集时记录下以i为首的队列的长度(如果存在这个队列)num[i],便于合并, 和点i到队首的距离front[i],便于查询(在find时维护) #include<ios ...
- Android学习笔记_72_Spinner的用法
一.普通 1. <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android= ...
- Error:Cannot determine Java VM executable in selected JDK
http://devnet.jetbrains.com/message/5521484#5521484 Configure -> Project defaults -> Project s ...
- 推荐几个Mac/Linux下比较好用的工具
1.Tmux,连接开发机可以让在任务在开发机一直执行,不用nohup &这种了也相对稳定,还有session可以记录当时的状态. 常用命令: tmux new -s name 指定名字开启一个 ...
- 64 位系统(win7/win8) 下使用C# 程序问题
1 C# 程序是控制台类,使用的组件如果是32位,建议在编译的时候,platform (X86,AnyCPU,X64)选择X86 .使用X86 模式编译,才能调用32位程序的API. 2 ASP. ...
- input上传图片并显示
html: <div id="click"><img> </div><!--照片预览的div --> <div class=& ...
- Angularjs基础(四)
AngularJS过滤器 过滤器可以使用一个管道符(|)添加到表达式和指令中. AngularJS过滤器可用于转换数据: currency 格式化数字为货币格式 filter 从数组中选着应子集. l ...
- web 打印功能
在项目开发中有时候会碰到要求打印页面中的数据的功能需求.需求原因主要有两点吧,一是需要打印的数据只是页面的一部分即页面的区域打印,比如只需要打印页面中表格里面选中的数据等,二是需要打印出来的样式和页面 ...