对仗(约瑟夫问题)

对仗

背景:
我营营长一言不合就想干人,搞得整个营乌烟瘴气
题目描述:
这次,营长让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;
}
posted @ 2016-10-05 11:44  抽空的太阳  阅读(108)  评论(0编辑  收藏  举报