调手表
题意:1小时n分钟。通过+1、+k把手表时间调到正确时间。若+之后时间超过n-1,则%n。
求最佳策略下,任意时间调到任意时间的最多次数。
思路:都从零开始,调到1-n-1。 最先调到该时间的方式为最佳策略。
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n,k;
int d[100005];
queue<int>q;
int main()
{
cin>>n>>k;
memset(d,-1,sizeof(d));
d[0]=0;
q.push(0);
while(!q.empty())
{
int p=q.front();
q.pop();
if(d[(p+1)%n]==-1)
{
q.push((p+1)%n);
d[(p+1)%10]=d[p]+1;
}
if(d[(p+k)%n]==-1)
{
q.push((p+k)%n);
d[(p+k)%n]=d[p]+1;
}
}
int maxx=0;
for(int i=0;i<n;i++)
maxx=max(maxx,d[i]);
cout<<maxx<<endl;
return 0;
}