洛谷 P1996 约瑟夫问题
题目背景
约瑟夫是一个无聊的人!!!
学了一点链表跑回来重做这题
于是TLE了…
下面是我的 …我也不知道算不算链表 代码
#include <iostream>
#include <cstdio>
using namespace std;
int n,m;
int cnt=1,cur=1;
struct T
{
int data;
int next;
}a[105];
inline int read()
{
char c;
int x=0,f=1;
do{
c=getchar();
if(c=='-')
f=-1;
}while(c<'0' || c>'9');
do{
x=x*10+c-'0';
c=getchar();
}while(c>='0' && c<='9');
return f*x;
}
inline void buildT(int n)
{
for(int i=1;i<n;++i)
{
a[i].data=i;
a[i].next=i+1;
}
a[n].data=n;
a[n].next=1;
}
inline void delT(int k)
{
a[k].data=a[a[k].next].data;
a[k].next=a[a[k].next].next;
//这两句顺序千万不能反TAT
}
int main(){
n=read(),m=read();
buildT(n);
do{
if(cnt==m)
{
printf("%d ",a[cur].data);
cnt=1;
delT(cur);
/*for(int i=1;i<=n;++i)
{
printf("%d%c",a[i].data,i==n?'\n':' ');
}*/
}
cur=a[cur].next;
cnt++;
}while(a[cur].next!=cur);
printf("%d\n",a[cur].data);
return 0;
}