队列做法
#include <iostream>
using namespace std;
#include <queue>
int main(){
int n,k,m,t;
queue<int>a;
cin >> n >> k >> m;
for(int i=k;i<n;i++)
a.push(i);
for(int i=0;i<k;i++)
a.push(i);
while(a.size()>1){
for(int i=1;i<m;i++){
t = a.front();
a.pop();
a.push(t);
}
a.pop();
}
cout << a.front();
return 0;
}
vector模拟
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+10;
int main() {
ll n,k,m;
cin>>n>>k>>m;
vector<ll> ve(n);
for(ll i=0;i<n;i++) ve[i]=i;
m--;
while(ve.size()>1) {
//for(auto x:ve) cout<<x<<" ";
n=ve.size();
ve.erase(ve.begin()+(k+m)%n);
//cout<<endl;
k=((k+m)%n)%n;
}
cout<<ve[0]<<endl;
return 0;
}