Stay Hungry,Stay Foolish!

D - Marking

D - Marking

https://atcoder.jp/contests/abc290/tasks/abc290_d

 

思路

 

 

 https://zhuanlan.zhihu.com/p/607818729

x即为最小循环节的长度

即经过x次mark, mark的位置又回到了 0 位置。


如下为x最小循环的推导。

 

 

第k次所处的位置 由两部分决定

(1)k次所处在第几个循环节 loop_times = k / x

(2)k次所处第一个循环节内部相对位置 offset = k % x

   此相对位置对应的实际位置 = offset * D, 

    offset为循环节内,第几次移动, 每移动一次要在当前位置上加上D

    所以实际位置 = offset * D

    为了避免溢出 需要 % n

 

k次实际位置 = loop_time + offset*D%n = k / x + (k % x)*D%n

第一循环节内的实际位置 0, D, 2D,... xD

第二循环节内的实际位置 0+1, D+1, 2D+1,... xD+1

。。。。。

 

reference:

https://atcoder.jp/contests/abc290/submissions/39016002

Code

https://atcoder.jp/contests/abc290/submissions/39219152

复制代码
int t;
 
int main()
{
    cin >> t;
 
    REP(i, t){
        int n, d, k;
 
        cin >> n >> d >> k;
 
        k--;
 
        long long nd_gcd = __gcd(d, n);
 
        long long l = n / nd_gcd;
        
        long long loop_pos = (k%l) * d % n;
        
        long long loop_times = k / l;
        
        cout << loop_pos + loop_times << endl;
    }
 
    return 0;
}
 
复制代码

 

posted @   lightsong  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
历史上的今天:
2019-02-26 Redux中间件组合方法
2018-02-26 State management(状态管理)
2017-02-26 Content Security Policy介绍
2015-02-26 Cross-Site Scripting(XSS)的类型
千山鸟飞绝,万径人踪灭
点击右上角即可分享
微信分享提示