对仗
背景:
我营营长一言不合就想干人,搞得整个营乌烟瘴气
题目描述:
这次,营长让n个同学按照编号1至n顺时针围成一圈,从一号开始顺时针报数,报到t的人直接被教官打死,拖到圈子外面,然后从他下一位同学接着开始报数,某位同学为了伸张正义,准备找教官对仗,顺便搞一个大新闻,为了有充分的时间准备,他决定站在最后一个被教官干掉的地方,你需要求出这是第几个位置。
输入描述:
一行两个数n,t
输出描述:
一行一个数表示答案
样例输入:
3 2
样例输出:
3
数据范围:
对于30%的数据,满足n≤100
对于100%的数据,满足n≤100000,1≤t≤100
思路:
约瑟夫环模板题
精髓:把a数组当做链表
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=100010;
int n,t,ti=1,tot,now,a[maxn];
int main()
{
cin>>n>>t;now=n;
for(int i=1;i<=n;i++)
a[i]=i+1;a[n]=1;
while(tot<n)
{
while(ti<t)
{
now=a[now];
ti++;
}
if(tot==n-1)
{
cout<<a[now];
break;
}
a[now]=a[a[now]];ti=1;tot++;
}
return 0;
}