[Gym - 101064F Metal detector] 递推
来源:互联网 发布:编程金字塔图案 编辑:程序博客网 时间:2024/05/18 15:55
[Gym - 101064F Metal detector] 递推
题目链接:[Gym - 101064F Metal detector]
题意描述:有N个人排队,第一个人出队,第二个人调到队尾,第三个人出队,第四个人调到队尾,……依次类推,求第K个人是第几个出队的。
解题思路:今天组队赛的时候SB了,推了好久,没有搞出来。卡在这么个水题上。
当K是奇数的时候, 毫无疑问,答案就是
考虑K为偶数的情况:
- N为偶数:ans(N, K)==>N/2 + ans(N/2, K/2);
- N为奇数:ans(N, K)==>N/2 + ans(N/2+1, K/2+1); 为什么是这样的呢?是因为本次操作先将N/2个元素出队,然后多余了最后一个元素先不处理,就相当于最后一个元素放在下一次操作里面去,那么下一次操作就相当于要处理N/2+1个数,其他的数字向后移动一位。这个感觉可意会不好言传…
#include <bits/stdc++.h>using namespace std;#define FIN freopen("input.txt","r",stdin)#define FOUT freopen("output.txt","w",stdout)int N, K;int solve (int n, int k) { if (k & 1) return (k >> 1) + 1; if (n & 1) { return (n >> 1) + solve ( (n >> 1) + 1, (k >> 1) + 1); } else { return (n >> 1) + solve (n >> 1, k >> 1); }}int main() {#ifndef ONLINE_JUDGE FIN; // FOUT;#endif // ONLINE_JUDGE scanf ("%d", &T); while (T--) { scanf ("%d %d", &N, &K); printf ("%d\n", solve (N, K) ); } return 0;}
0 0
- [Gym - 101064F Metal detector] 递推
- uva 1425 - Metal(递推)
- UVA 1425 - Metal(递推)
- LA 4258 Metal (递推)
- 递归递推 F
- [Gym-101350F] F
- 递推递归练习 F
- 递推递归练习F
- 递推递归练习F
- 《递归递推练习》F
- 递归递推练习 F
- Gym 100685 F Flood
- Gym 100989F STL
- codeforces Gym 101102F
- Codeforces-GYM-100726F
- Codeforces GYM 100803F
- Gym - 100947F
- [Gym-100520F]
- Web服务器的工作原理
- 得到 NSDictionary count (个数)
- OpenGL状态机/变换堆栈/基本类型和函数
- Android简易手势密码开源库
- ios NSFetchedResultsController的使用
- [Gym - 101064F Metal detector] 递推
- TensorFlow安装所遇到的问题
- 程序员软技能
- OnItemClickListener 条目的点击侦听
- JShell
- 《训练指南》大白 二维几何基础 基本公式(模板)
- 在Azure上部署squid的教程
- java中的泛型总结
- RPC应用的java实现