luogu P3409 值日班长值周班长 exgcd
2024-09-25 21:43:06
LINK:值日班长值周班长
题目描述非常垃圾。
题意:一周5天 每周有一个值周班长 每天有一个值日班长 值日班长日换 值周班长周换。
共n个值日班长 m个值周班长 A是第p个值日班长 B是第q个值日班长 问 最早是哪一天 使得值日班长为A且值周班长为B.
显然是一个类似于方程组的题目 可以列出方程 设是第x天.
\((x-p)\mod n=0\)
\(\lceil\frac{x}{5}\rceil \mod m=q-1\)
整到一个方程里就是 x=ny+p.
\(\lceil\frac{ny+p}{5}\rceil \mod m=q-1\)
解出来y即可。发现向上取整非常的不人性。
考虑到\(\frac{ny+p+bit}{5}==\lceil\frac{ny+p}{5}\rceil\)
枚举一下bit(0<=bit<=4)这样向上取整就可以被去掉 解同余方程即可。
有点晕了。。。写挂了。咕掉
ll T,n,m,p,q,xx,yy;
ll ans;
inline ll exgcd(ll a,ll b)
{
if(!b){xx=1;yy=0;return a;}
ll d=exgcd(b,a%b);
ll zz=xx;xx=yy;yy=zz-a/b*yy;
return d;
}
signed main()
{
freopen("1.in","r",stdin);
while(gt(n)==1)
{
gt(p);ans=0;
gt(m);gt(q);if(q==m)q=0;
rep(0,4,i)
{
ll a=n,b=5*m;
ll c=((5*q-p-i)%b+b)%b;
ll gcd=exgcd(a,b);
if(c%gcd)continue;
ll mod=b/gcd;
xx=(xx%mod+mod)%mod;
xx=xx*c/gcd;
ll now=xx*n+p;
if(!ans)ans=now;
else ans=min(ans,now);
}
if(ans)putl(ans);
else puts("Orz mgh!!!");
}
return 0;
}
最新文章
- SOLID 设计原则
- 问题解决——MFC Ribbon 响应函数 错乱 执行其他函数
- [tem]RMQ(st)
- PHP魔术方法在框架中的应用
- hadoop集群全纪录
- paper 92:图像视觉博客资源2之MIT斯坦福CMU
- mysql大数据导出导入
- C# 实现HTML5服务器推送事件
- Apriori算法-位运算-C语言
- SAN &; vSAN &; vSAN storage
- Windows内核函数
- 大数运算的算法设计和C++实现
- Kafka系列之-自定义Producer
- 熟悉使用Github,VS进行项目的开发(第二次作业)
- InstallShield Limited Edition for Visual Studio 使用
- 如何卸载EXCEL中的插件?
- sitecore系统教程之体验编辑器中创建一个项目
- docker swarm英文文档学习-6-添加节点到集群
- JDBC结果集
- HTML5 Canvas ( 贝塞尔曲线, 一片星空加绿地 ) quadraticCurveTo, bezierCurveTo
热门文章
- 常用API - Arrays、Math、Object
- 03-springboot整合elasticsearch-源码初识
- Evacuation,题解
- Python-模块XlsxWriter将数据写入excel
- 二分查找&;二叉排序树
- python数据处理(二)之处理Excel文件
- row_number() over()排序功能说明
- OSCP Learning Notes - WebApp Exploitation(2)
- javascript : 点击按钮,把某标签中的内容复制到剪贴板
- win10里面怎么获取最高管理员权限