P8674 [蓝桥杯 2018 国 B] 调手表

原题链接

题解 一道思维题

由于闹钟是圆的,所以从任意一个分钟数调到另外任意一个分钟数最多要按多少次相当于从点0调到1~n-1任意一点最多要按多少次
可以把1~n看成一个一个点,就相当于单源最短路了
md,好巧妙

code

#include<bits/stdc++.h>
using namespace std;
struct refresh
{
    int pos,val;
};
int main()
{
    int n,k;
    cin>>n>>k;
    int times[n+5];
    memset(times,0x3f,sizeof times);
    queue<refresh> q;
    q.push({0,0});
    while(!q.empty())
    {
        int now=q.front().pos,val=q.front().val;
        q.pop();
        if(val<times[now])times[now]=val;
        else continue;
        q.push({(now+1)%n,val+1});
        q.push({(now+k)%n,val+1});
    }
    int ans=0;
    for(int i=0;i<n;i++)ans=max(ans,times[i]);
    cout<<ans<<endl;
    return 0;
}

posted @ 2024-02-12 18:15  纯粹的  阅读(41)  评论(0)    收藏  举报