队列做法

#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;
}