uvalive 4727 jump跳跃(dp/约瑟夫问题变形)
2015-06-14 20:36
369 查看
题意是: 个数组成一个环,从第k个元素开始删除,每隔k个元素删一个,问最后删除的三个是什么
思路:约瑟夫问题变形,倒数第二个第三个求法与最后一个元素求法相同
题意是: 个数组成一个环,从第k个元素开始删除,每隔k个元素删一个,问最后删除的三个是什么
思路:约瑟夫问题变形,倒数第二个第三个求法与最后一个元素求法相同
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<queue> #include<stack> #include<string> #include<map> #include<set> #define eps 1e-6 #define LL long long using namespace std; const int maxn = 500000 + 100; const int INF = 0x3f3f3f3f; //freopen("input.txt", "r", stdin); int f1[maxn], f2[maxn], f3[maxn], n, k; void cal_f() { f3[3] = (k-1) % 3; f2[3] = (k%2 == 0 ? (2+f3[3])%3 : (1+f3[3])%3); f1[3] = 3 - f2[3] - f3[3]; for(int i = 4; i <= n; i++) { f1[i] = (f1[i-1]+k) % i; f2[i] = (f2[i-1]+k) % i; f3[i] = (f3[i-1]+k) % i; } f1 ++; f2 ++; f3 ++; } int main() { int t; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &k); cal_f(); //for(int i = 3; i <= n; i++) printf("%d %d %d\n", f3[i], f2[i], f1[i]); printf("%d %d %d\n", f3 , f2 , f1 ); } return 0; }
相关文章推荐
- Android官方提供的支持不同屏幕大小的全部方法
- 返回一个二维整数数组中最大联通子数组的和
- Swap Nodes in Pairs
- 用户需求调研报告
- HTTP协议学习
- xcode6 iOS sdk8.1隐藏系统状态栏
- Android最佳实践之响应灵敏性
- 数据结构与算法——冒泡排序
- 安安静静的做个美男子
- windows开发cocos2d-x系列(3)— 舞动你的精灵
- 团队项目作业-面向对象程序设计
- 返回一个二维整数数组中最大联通子数组的和
- Android 反编译资料整理
- coredump analyzer 神器, 没有之一.
- LevelDB原理探究与代码分析(上)
- BZOJ 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题( dp )
- activemq与spring集成配置
- The partial sum problem
- springmvc 生成pdf,并下载
- 初窥c++11:lambda函数及其用法