UVALive - 3882:And Then There Was One

约瑟夫环

f[i]表示有i个人先处理第k个人,最后被处理的人是谁

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 10005
using namespace std;
int f[MAXN];
int n,m,k;
int main()
{
    while(1){
        scanf("%d%d%d",&n,&k,&m);
        if(!n)break;
        for(int i=2;i<=n;i++){
            f[i]=(f[i-1]+k)%i;
        }
        printf("%d\n",((m-k+f[n])%n+n)%n+1);
    }
    return 0;
}
时间: 2024-11-14 12:20:04

UVALive - 3882:And Then There Was One的相关文章

UVAlive 10154:Dire Wolf 区间DP

Dire Wolf 题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5073 题意: 有一排的狼,每只狼有一个基础攻击力a[i],和一个加成值b[i](可以给相邻的两只狼加b[i]点攻击力,这只狼死后就不加了),你每杀一只狼需要花费能量值(狼的当前攻击力),你杀了这只狼周围的狼会自动往中间聚集(即不会有空隙),求杀

UVALive - 3882 —— And Then There Was One

题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11350 约瑟夫环问题 这道题问的是最后死的是那个数字,所以可以不需要模拟,直接通过递推来推出最后幸存的那个数字: 声明:这里我们将所有人的编号都减1.比如8个人的编号变为0~7 我们可以通过倒推的方式获得最后剩下那个人在最开始的编号. 假设,现在只剩最后一个数字,那么我们从它开始编号,那么因为只有它只身一人,所以就只好将它编号为0 那么它在上一轮的编号是多少呢? 通过

UVALive - 7831 :ACM Tax (主席树求树路径上中位数:LCA+主席树)

题意:给定一棵带权树,Q次询问,每次询问路径上的中位数. 思路:中位数分边数奇偶考虑,当当边数为num=奇时,结果就算路径第num/2+1大,用主席树做即可... (做了几道比较难的主席树,都wa了...只有来刷刷水题,准备晚上的CF了) #include<bits/stdc++.h> using namespace std; const int maxn=1000010; int Laxt[maxn],Next[maxn],To[maxn],cost[maxn],cnt; int fa[50

UVALive - 4097:Yungom(逼近 贪心)(DP)

pro:有D个字母,每个字母有自己的权值,现状需要用它们拼出N个单词,使得这些单词互相不为另外一个的前缀. 且单词的权值和最小.D<=200; N<=200; sol:如果建立字典树,那个每个单词的权值权值救赎根到叶子的路径权重和. 感觉有点想哈夫曼树,但是没什么大的关系,因为不能倒推. 由于ND比较小,我们直接贪心,维护一个大小为N+D的数组b[],一直更新,原则如下:每次排序b[],把 b[1]替换为b[1]+a[]:一直操作,直到不能再变小为止. #include<bits/std

UVALive 3882 And Then There Was One

题解: 先来探讨约瑟夫问题 常规做法是链表模拟.不多说 递推做法 分析: 第一次:        0.1.2 ..... k-1.k.k+1........n-1 去掉k - 1     0.1.2 .....       k.k+1........n-1 从k开始       k.k+1...... n-1.0.1........ k-2 转换           0.1..........n-2  (转换公式: ( i - k + n ) % n ) 第二次        0.1......

UVALive - 3530:Martian Mining

dp 可以发现,对于(i,j),要么把它运上去,那么把它运到左边,枚举一下即可 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define MAXN 505 using namespace std; int f[MAXN][MAXN]; int a[MAXN][MAXN],b[MAXN][MAXN]; int s[MAXN][MAXN],t[MAXN][MA

UVALive - 3027:Corporative Network

加权并查集 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define MAXN 20000+10 #define pii pair<int,int> using namespace std; int fa[MAXN]; int d[MAXN]; int n; int Abs(int x){ return (x>0?x:-x); } pii

UVALive - 3938:&quot;Ray, Pass me the dishes!&quot;

优美的线段树 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<cmath> #define MAXN 500000+10 #define ll long long #define pii pair<int,int> #define mp make_pair using namespace std; int a[MAXN]

训练指南DP阶段训练1

最近又忙又颓.............时间抓不紧....下学期开始就要准备考研了.......就2个月左右可以做自己喜欢的事了....争取把紫书和白书没做的,做过的..来一次完整的总结 训练指南上面的5个例题+后面15个习题是第一阶段 vjudge训练地址 http://vjudge.net/contest/139533#overview -------------------------------------------------------------------------------