POJ-3517-And Then There Was One

来源:互联网 发布:制造业数据采集公司 编辑:程序博客网 时间:2024/05/21 18:01

Uva 题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1883

这个题类似于约瑟夫环,但是由于题目数据比较大,所以只能采用递推的做法。

可以通过画图的方法得到转移方程,即dp[n]=(dp[n-1]+k)%n

最后仅仅是需要加上开始的位置偏差即可。

由于k的数值比较大,最后可能出现负数与0的情况,需要特殊处理一下。

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=1e4+10;int dp[maxn];int main(){    int n,k,m;    while(scanf("%d%d%d",&n,&k,&m)&&n)    {dp[1]=0;for(int i=2;i<=n;i++)    dp[i]=(dp[i-1]+k)%i;int ans=(dp[n]+m-k+1)%n;if(ans<=0)    ans=ans+n;printf("%d\n",ans);    }    return 0;}


原创粉丝点击