poj 2886
来源:互联网 发布:mac os yosemite 下载 编辑:程序博客网 时间:2024/05/16 04:57
Description
N children are sitting in a circle to play a game.
The children are numbered from 1 to N in clockwise order. Each of them has a card with a non-zero integer on it in his/her hand. The game starts from the K-th child, who tells all the others the integer on his card and jumps out of the circle. The integer on his card tells the next child to jump out. Let Adenote the integer. If A is positive, the next child will be the A-th child to the left. If A is negative, the next child will be the (−A)-th child to the right.
The game lasts until all children have jumped out of the circle. During the game, the p-th child jumping out will get F(p) candies where F(p) is the number of positive integers that perfectly divide p. Who gets the most candies?
Input
Output
Output one line for each test case containing the name of the luckiest child and the number of candies he/she gets. If ties occur, always choose the child who jumps out of the circle first.
Sample Input
4 2Tom 2Jack 4Mary -1Sam 1
Sample Output
Sam 3
/*踏实!!努力!!*/#include<iostream>#include<stdio.h>#include<cmath>#include<cstring>#include<map>#include<queue>#include<stack>using namespace std;#define N 500005int a[37]={1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,5040, 7560,10080,15120,20160,25200,27720,45360,50400,55440,83160,110880, 166320,221760,277200,332640,498960,500001};int b[37]={1,2,3,4,6,8,9,10,12,16,18,20,24,30,32,36,40,48,60,64,72,80,84,90,96, 100,108,120,128,144,160,168,180,192,200,1314521};int sum[N<<2];int n,k,data[N];char name[N][10];void build(int l,int r,int cur){ if(l==r){ sum[cur]=1; return ; } int mid=(l+r)>>1; build(l,mid,cur<<1); build(mid+1,r,cur<<1|1); sum[cur]=sum[cur<<1]+sum[cur<<1|1]; return ;}int query(int k,int l,int r,int cur){ if(l==r){ sum[cur]=0; return l; } int ans; int mid=(l+r)>>1; if(k<=sum[cur<<1]) ans=query(k,l,mid,cur<<1); else ans=query(k-sum[cur<<1],mid+1,r,cur<<1|1); sum[cur]=sum[cur<<1]+sum[cur<<1|1]; return ans;}int main(){ while(scanf("%d%d",&n,&k)!=EOF){ build(1,n,1); int Max,i=0,p; while(a[i]<=n) i++; p=a[i-1]; Max=b[i-1]; for(i=1;i<=n;i++) scanf("%s%d",name[i],&data[i]); int idx; int m=n; for(i=0;i<p;i++){ n--; idx=query(k,1,m,1); if(n==0) break; if(data[idx]>0) k=(k-1+data[idx]-1)%n+1; else k=((k-1+data[idx])%n+n)%n+1; } printf("%s %d\n",name[idx],Max); } return 0;}
- poj 2886
- poj 2886
- poj 2886
- poj 2886
- poj 2886
- poj 2886
- POJ 2886
- poj 2886
- poj-2886
- poj~2886
- poj 2886
- poj 2886
- poj 2886
- poj 2886
- poj 2886 线段树
- poj~2886~线段树
- POJ 2886 单点更新
- poj 2886 线段树
- codeforces290E
- CSS基础-18CSS盒子模型-盒子模型应用
- LTView
- 【实例】html5中使用localStorage实现简易的便利贴网页
- epoll实现分析
- poj 2886
- 几种常见的开源协议比较
- 图像检测经典的评估方式——PR曲线,ROC曲线
- 贝叶斯决策
- 怎样判断一个P2P平台是否靠谱?
- CSS基础-19CSS定位-定位
- POI-----POI操作Excel-6、超链接
- Android自定义View模仿QQ主页的开关
- C++之sstream格式流(常用于格式转换)