比较简单的题,看到网上题解基本都是bfs解法,发个贪心解法记录一下。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
typedef pair<int,int>pii;
const int mod = 1e9 + 7 , INF = 0x3f3f3f3f , N = 1e6 + 10;
int f[N];
int g[N];
int main()
{
int n,k;
cin >> n >> k;
memset(f,0x3f,sizeof f);
memset(g,0x3f,sizeof g);
for (int i = n ; i >= 0 ; i --)
f[((LL)i * k) % n] = i;
for (int i = 0 ; i < n ; i ++)
if (f[i] != INF)
f[i] -= i;
for (int i = 0 ; i < n ; i ++)
g[i] = min(g[i - 1],f[i]);
int res = -1;
for (int i = 1 ; i < n ; i ++)
res = max(res,i + g[i]);
cout << res;
}