ZOJ 1088

典型的Joseph问题……由于数据范围小,直接暴力就可以解决了……

用到了链表的数据结构……

时间:90毫秒。

#include "stdio.h"
#include "string.h"
struct lianbiao{
	int prev,next;
}p[152];
const int INF=2147483647;
void init(int n){
	int i;
	for(i=2;i<n;i++){
		p[i].prev=i-1;
		p[i].next=i+1;
	}
	p[1].prev=n;
	p[1].next=2;
	p[n].prev=n-1;
	p[n].next=1;
}
void del(int x){
	p[p[x].prev].next=p[x].next;
	p[p[x].next].prev=p[x].prev;
}
int is_CGB_last(int n,int m){
	int cnt,i,tmp;
	init(n);
	//printf("\n*******N = %d , M = %d .\n",n,m);
	cnt=1;tmp=p[1].prev;del(1);
	//printf("1 ( %d ) ",tmp);
	while(cnt<n){
		//printf("\n**cnt = %d .\n",cnt);
		for(i=1;i<=m;i++){
			tmp=p[tmp].next;
		}
		//printf("-> %d ( %d ) ",tmp,p[tmp].prev);
		cnt++;
		if((tmp==2)&&(cnt<n))return 0;
		if((tmp==2)&&(cnt==n)){
			//printf("\n");
			return 1;
		}
		del(tmp);
		tmp=p[tmp].prev;

	}
	printf("\n");
}
int main(){
	int ans[152];
	int n,m;
	memset(ans,0,sizeof(ans));
	while(1){
		scanf("%d",&n);
		if(!n)break;
		if(ans[n]){
			printf("%d\n",ans[n]);
			continue;
		}
		for(m=2;m<=INF;m++){
			if(is_CGB_last(n,m)){
				printf("%d\n",m);
				ans[n]=m;
				break;
			}
		}
	}
	return 0;
}

ZOJ 1088,布布扣,bubuko.com

时间: 2025-01-08 10:40:47

ZOJ 1088的相关文章

zoj 1088题解--Josephus 问题,加速解决

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">zoj 1088题目题目大意是,对n栋楼停电,先停第一栋,再隔m栋停一栋.数到最后一栋后从头循环计数,已经断电的不参与计数.要选取适当的m,使得即使其他楼都没电了,但第二栋楼仍然有电. </span> 如果将该题视为普通的模拟算法,其时间复杂度将高达O(m*n).由于题目给了

zoj题目分类

饮水思源---zoj 转载自:http://bbs.sjtu.edu.cn/bbscon,board,ACMICPC,file,M.1084159773.A.html 注:所有不是太难的题都被归成了“简单题”,等到发现的时候已经太晚了,我太死脑筋 了……:( 有些题的程序我找不到了,555……:( SRbGa的题虽然都很经典……但是由于其中的大部分都是我看了oibh上的解题报告后做 的,所以就不写了…… 题目排列顺序没有规律……:( 按照个人感觉,最短路有的算做了DP,有的算做了图论. 有些比较

poj 1088 滑雪 DP(dfs的记忆化搜索)

题目地址:http://poj.org/problem?id=1088 题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路径 求最大的下滑路径 分析:因为只能从高峰滑到低峰,无后效性,所以每个点都可以找到自己的最长下滑距离(只与自己高度有关).记忆每个点的最长下滑距离,当有另一个点的下滑路径遇到这个点的时候,直接加上这个点的最长下滑距离. dp递推式是,dp[x][y] = max(dp[x][y],dp[x+1][y]+

概率dp ZOJ 3640

Help Me Escape Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice ZOJ 3640 Appoint description:  System Crawler  (2014-10-22) Description Background     If thou doest well, shalt thou not be accepted? an

zoj 2156 - Charlie&#39;s Change

题目:钱数拼凑,面值为1,5,10,25,求组成n面值的最大钱币数. 分析:dp,01背包.需要进行二进制拆分,否则TLE,利用数组记录每种硬币的个数,方便更新. 写了一个 多重背包的 O(NV)反而没有拆分快.囧,最后利用了状态压缩优化 90ms: 把 1 cents 的最后处理,其他都除以5,状态就少了5倍了. 说明:貌似我的比大黄的快.(2011-09-26 12:49). #include <stdio.h> #include <stdlib.h> #include <

ZOJ 1718 POJ 2031 Building a Space Station 修建空间站 最小生成树 Kruskal算法

题目链接:ZOJ 1718 POJ 2031 Building a Space Station 修建空间站 Building a Space Station Time Limit: 2 Seconds      Memory Limit: 65536 KB You are a member of the space station engineering team, and are assigned a task in the construction process of the statio

ZOJ 3607 Lazier Salesgirl (贪心)

Lazier Salesgirl Time Limit: 2 Seconds      Memory Limit: 65536 KB Kochiya Sanae is a lazy girl who makes and sells bread. She is an expert at bread making and selling. She can sell the i-th customer a piece of bread for price pi. But she is so lazy

ZOJ - 2243 - Binary Search Heap Construction

先上题目: Binary Search Heap Construction Time Limit: 5 Seconds      Memory Limit: 32768 KB Read the statement of problem G for the definitions concerning trees. In the following we define the basic terminology of heaps. A heap is a tree whose internal n

ZOJ 2859 二维线段树

思路:自己写的第二发二维线段树1A,哈哈,看来对二维的push操作比较了解了:但是还没遇到在两个线段树中同时进行push操作的,其实这题我是想在x维和y维同时进行push操作的,但是想了好久不会,然后看到这题又给出10秒,然后想想在x维线段直接单点查询肯定也过了,然后在第二维就只有pushup操作,在第一维线段树没有pushup操作.要是在第一维也有pushup操作的话,那就不用单点查询那么慢了.不过也A了,想找题即在二维同时进行pushup和pushdown操作的. #include<iost