CF 345A Mike and Frog
2024-08-31 22:09:56
自己歪歪的做法WA了好多发。
原题中每一秒都相当于
$x1 = f1(x1)$
$x2 = f2(x2)$
然后这是一个定义域和值域都在[0,m-1]的函数,显而易见其会形成一个环。
而且环长不超过m,所以实际上问题就分为了两部分:
1.x1变到a1,x2变到a2(h -> a的长度)
2.x1做循环,x2做循环直到同时为a1,a2。(a -> a的长度)
我们设第一步分别用了m1 s, m2 s,第二步用了 t1 s ,t2 s。
对于第一部分我们可以直接枚举吗,因为长度不超过m。
对于第二部分实际上是两个式子。
$ans = △1 * t1 + m1$
$ans = △2 * t2 + m2$
这个式子只需要枚举就行了。因为m1,m2最多相差不超过m,而在最优决策下△1或△2绝对值每变化1,m1,m2必然至少变化1,所以△最大为m
问题解决,注意各种特判,比如都没有t值,有一个有t值,无解的情况。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib> #define LL long long using namespace std; LL m,ans; LL gcd(LL a,LL b){
if(!b) return a;
return gcd(b,a%b);
} /*
since the f(x) be an fuction from a num x to y.
so it may be a cricle.
*/ void solve(LL &ansv,LL &sumv){
LL h,a,x,y,ans=;
scanf("%I64d%I64d%I64d%I64d",&h,&a,&x,&y);
for(int i=;i<=m;i++){
h=(h*x%m+y)%m;
if(h==a){
ansv=(LL)i; //how many seconds it would take for us to arrive 'a' from 'h'
goto L;
}
}
puts("-1");
exit();
L:h=a;
sumv=-;
for(int i=;i<=m;i++){
h=(h*x%m+y)%m; //how many seconds it would take for us to arrive 'a' from 'a'
if(h==a){
sumv=(LL)i;
return;
}
}
} /*
a1 + k1*a2 = b1 + k2*b2 ans = a1 (mod a2)
ans = b1 (mod b2)
*/ int main(){
scanf("%I64d",&m);
LL a1,a2,b1,b2;
solve(a1,a2);
solve(b1,b2);
if(a1==b1) ans=a1;
else if(a2==-&&b2==-){
puts("-1");
return ;
}
else if(a2==-&&a1>b1&&(a1-b1)%b2==) ans=a1;
else if(b2==-&&b1>a1&&(b1-a1)%a2==) ans=b1;
else if(a2==-||b2==-){
puts("-1");
return ;
}
else{
LL k1;
for(k1=;k1<=m;k1++)
if((a1+k1*a2-b1)%b2==){
ans=a1+k1*a2;
if(ans>=b1) break;
}
if(k1>m) ans=-;
}
printf("%I64d\n",ans);
return ;
}
Code
最新文章
- 自定义Toast和RatingBar的简单用例
- matlab 中txt文件(含字符及数值)处理
- Thinkphp---------Call to a member function free_result() on a non-object
- HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)
- CSS - toggle collapse 类似bootstrap的展开效果
- Rs2008内存管理策略
- 三种实例化bean的方式
- 关于mina框架EMFILE: open too many files exception的处理
- SwapEffect 枚举(定义交换效果)
- JavaScript 标准对象
- LaTeX手动安装宏包(package)以及生成帮助文档的整套流程
- Spark Streaming与kafka整合实践之WordCount
- 图片自动转换效果 jquery
- OSPF理论总结
- poj 3259(bellman最短路径)
- 文本宽度的测量--measureText
- Django“少折腾”
- 基于redis的分布式锁实现
- WebSocket connection to &#39;ws://xx:9502/&#39; failed:Error in connection establishment:net::ERR_CONNECTION_TIMED_OUT
- linux下/var/run目录下.pid文件的作用
热门文章
- vue详细操作目录-基础篇
- C语言宏定义时#(井号)和##(双井号)作用
- 小白学开发(iOS)OC_ 字符串重组(2015-08-13)
- c++的运算符的重载
- Why containers? Why should we care? 新旧容器的对比
- UVA 10951 - Polynomial GCD(数论)
- Remote Debugging Android Devices
- js 链接传入中文参数乱码解决
- Long转换为date
- 给第三方apk进行系统签名的几种方式【转】