(水题)洛谷

https://www.luogu.org/problemnew/show/P1996

试了一下数组实现的双向链表,是挺难用的,估计是应该写个get_next()函数比直接用next数组好。

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int _next[101];
int _prev[101];
int n,m;

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<n-1;i++){
        _next[i]=(i+1)%n;
        _prev[(i+1)%n]=i;
    }

    _next[n-1]=n;
    _prev[n]=n-1;

    _next[n]=1;
    _prev[1]=n;

    int cntm=0;
    int cntn=n;

    int i=1;
    while(cntn){
        cntm++;
        /*cout<<"i="<<i<<" cntm="<<cntm<<endl;
        for(int j=1;j<=10;j++){
            printf("%d ",_next[j]);
        }
        printf("
");
        for(int j=1;j<=10;j++){
            printf("%d ",j);
        }
        printf("

");*/

        if(cntm==m){
            _next[_prev[i]]=_next[i];
            _prev[_next[i]]=_prev[i];
            printf("%d%c",i," 
"[cntn==1]);
            cntm=0;
            cntn--;
        }
        i=_next[i];
    }
}