hdu 1443 Joseph+暴力打表
2012-12-03 16:33
295 查看
题目大意:k个好人,k个坏人,确定n,利用Joseph方法删除所有坏人.
由于数据规模,可以利用暴力打表,以后能打表就尽量打表。
这题原本模拟数据时间完全够的,但是测试数据有很多重复的,导致很多人超时,暗坑!!!!
以后要注意点这种情况。
打表:
/*
题目总结: 注意学习,模拟约瑟夫循环的过程!
三个方程:
kill=(ans+ans - 1)%sum //下一处要删除的位置
if(kill==0)kill=sum; //为零的特殊情况
sum--; //人数减一
*/
由于数据规模,可以利用暴力打表,以后能打表就尽量打表。
这题原本模拟数据时间完全够的,但是测试数据有很多重复的,导致很多人超时,暗坑!!!!
以后要注意点这种情况。
打表:
#include<stdio.h> int main(){ int n,a[14]={0,2,7,5,30,169,441,1872,7632,1740,93313,459901,1358657,2504881}; while(scanf("%d",&n)&&n) printf("%d\n",a[n]); return 0; }
/*
题目总结: 注意学习,模拟约瑟夫循环的过程!
三个方程:
kill=(ans+ans - 1)%sum //下一处要删除的位置
if(kill==0)kill=sum; //为零的特殊情况
sum--; //人数减一
*/
#include<iostream> #include<cstdio> #include<cstring> #include<iostream> #include<cmath> using namespace std; int res[16]; int joseph(int n) { int ans, flag, sum; if(res ) return res ; else { for(ans = n + 1; ; ++ans) { flag = 0; sum = 2 * n; for(int j = ans; ; j += ans - 1) //人数减1 { if(j > sum) j = j % sum ? j % sum : sum; //人数减1 if(j <= n) break; else sum--; if(sum == n) { flag = 1; break; } } if(flag) { res = ans; return res ; } } } } int main() { int n; while(cin>>n,n) { cout<<joseph(n)<<endl; } return 0; }
相关文章推荐
- hdu 1443 Joseph+暴力打表
- HDU 1443 Joseph 约瑟夫环 暴力
- hdu 1331 (暴力打表)
- hdu 1443 Joseph(约瑟夫环+枚举)
- hdu 4731 Minimum palindrome(暴力打表找规律)
- HDU 1443 joseph
- HDU 1012 u Calculate e【暴力打表,水】
- HDU-1058-Humble Numbers(暴力打表)
- hdu 5676 ztr loves lucky numbers(BC——暴力打表+二分查找)
- HDU 1443 Joseph
- hdu 4389 X mod f(x)(超暴力打表)
- HDU 5648 DZY Loves Math 暴力打表
- HDU 1443 Joseph
- HDU 1443 Joseph
- HDU 1443 Joseph
- hdu 5077 NAND(暴力打表)
- HDU 1058 Humble Numbers(打表+暴力)
- HDU 1496 Equations(哈希打表+二分暴力)
- Hdu 1443 Joseph
- HDU 1443 Joseph