Who Gets the Most Candies?
| Time Limit: 5000MS | Memory Limit: 131072K | |
| Total Submissions: 11303 | Accepted: 3520 | |
| Case Time Limit: 2000MS | ||
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 A denote 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
(consisting of at most 10 letters) and the integers (non-zero with magnitudes within 108) on their cards in increasing order of the children’s numbers, a name and an integer separated by a single space in a line with no leading or trailing
spaces.
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 2
Tom 2
Jack 4
Mary -1
Sam 1
Sample Output
Sam 3
这道题可以用线段树做,是很有趣的一道,用到了约瑟夫环和反素数表。反素数的定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数·在这道题中,要求的就是不超过n的最大反素数p,因为它的因数最多,即只要找出第p个跳出孩子的编号。另一个用到的是约瑟夫环公式,设跳出的小孩编号是k,当孩子拿的号码是正数A时,如果A=1,那么下个要跳出的编号是K,此时对应的A是1,那么可设起点编号是k-1,对应的A是0,则其通项公式是k=(k-1+A-1)%n+1;(这里采用先顺时针走A-1步,再顺时针走最后一步,是为了避免出现取余后结果是0的情况),如果A小于0,那么同理可以得到对应编号为0所对应的编号为k-1,采用先逆时针走-A-1,在顺时针走一步的方法,得到公式k=((k-1+A)%n+n)%n+1;注意这里的A对应的是最初原始排列的小孩手里拿的编号,是搜到的线段树的叶节点。
#include<stdio.h>
#include<string.h>
char s[500005][11];
int num[500005];
int 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 c[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};
struct node
{
int l,r,pos;
}b[4*500005];
void build(int l,int r,int i)
{
int mid;
b[i].l=l;b[i].r=r;
if(l==r){
b[i].pos=1;return;
}
mid=(l+r)/2;
build(l,mid,i*2);
build(mid+1,r,i*2+1);
b[i].pos=b[i*2].pos+b[i*2+1].pos;
} int update(int pos,int i)
{
int mid;
if(b[i].l==b[i].r){
b[i].pos=0;return b[i].l;
}
b[i].pos--;
if(b[i*2].pos>=pos){
return update(pos,i*2);
}
else return update(pos-b[i*2].pos,i*2+1);
} int main()
{
int n,m,i,j,max,p,k,h;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(s,0,sizeof(s));
memset(num,0,sizeof(num));
build(1,n,1);
for(i=1;i<=n;i++){
scanf("%s%d",s[i],&num[i]);
}
i=1;
while(a[i]<=n){
i++;
}
max=c[i-1];
p=a[i-1];
for(i=1;i<=p;i++){
n--;
h=update(k,1); //h是最初始孩子的编号,也是线段树的叶节点
if(n==0)break; //很重要!
if(num[h]>0)
k=(k-1+num[h]-1)%n+1;
else k=((k-1+num[h])%n+n)%n+1;
//printf("%d\n",h);
}
printf("%s %d\n",s[h],max);
}
return 0;
}
Who Gets the Most Candies?的更多相关文章
- 【POJ2886】Who Gets the Most Candies?-线段树+反素数
Time Limit: 5000MS Memory Limit: 131072K Case Time Limit: 2000MS Description N children are sitting ...
- poj 3159 Candies 差分约束
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 22177 Accepted: 5936 Descrip ...
- Who Gets the Most Candies?(线段树 + 反素数 )
Who Gets the Most Candies? Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%I64d &am ...
- poj---(2886)Who Gets the Most Candies?(线段树+数论)
Who Gets the Most Candies? Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 10373 Acc ...
- poj3159 Candies(差分约束,dij+heap)
poj3159 Candies 这题实质为裸的差分约束. 先看最短路模型:若d[v] >= d[u] + w, 则连边u->v,之后就变成了d[v] <= d[u] + w , 即d ...
- HDU 5127 Dogs' Candies
Dogs' Candies Time Limit: 30000/30000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) T ...
- C. Om Nom and Candies 巧妙优化枚举,将复杂度控制在10e6
C. Om Nom and Candies 无线超大背包问题 #include <iostream> #include <cstdio> #include <cstrin ...
- POJ 3159 Candies (栈优化spfa)
Candies 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/J Description During the kinderga ...
- POJ 3159 Candies(差分约束,最短路)
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 20067 Accepted: 5293 Descrip ...
- (poj)3159 Candies
题目链接:http://poj.org/problem?id=3159 Description During the kindergarten days, flymouse was the monit ...
随机推荐
- dig的安装和使用
-bash: dig: command not found 解决办法: yum -y install bind-utils dig www.baid bu.com 查看a记录 dig www.ba ...
- P1140 相似基因(字符串距离,递推)
题目链接: https://www.luogu.org/problemnew/show/P1140 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C, ...
- 【linux】系统编程-6-POSIX标准下的信号量与互斥锁
目录 前言 8. POSIX信号量 8.1 概念 8.2 POSIX无名信号量 8.3 POSIX有名信号量 8.4 POPSIX信号量与system V信号量的区别 9. POSIX互斥锁 9.1 ...
- 企业项目迁移go-zero全攻略(一)
作者:Mikael 最近发现 golang 社区里出了一个新兴的微服务框架.看了一下官方提供的工具真的很好用,只需要定义好 .api 文件模版代码都可以一键生成,只需要关心业务:同时 core 中的工 ...
- CWE 4.3:强化你的数据自我保护能力
摘要:如何通过软件自动的检查法规中涉及的数据保护, 新版的CWE 4.3 给出了一个解决途径. 1. 按照惯例,先说故事 用12月初在深圳参加的"全球C++及系统软件技术大会"里C ...
- SAP ERP中权限参数和角色相关表
SAP版本:S/4 HANA 1809
- vue.esm.js?efeb:628 [Vue warn]: Invalid prop: type check failed for prop "defaultActive". Expected String with value "0", got Number with value 0.
vue.esm.js?efeb:628 [Vue warn]: Invalid prop: type check failed for prop "defaultActive". ...
- python基础(格式化输出、基本运算符、编码)
1,格式化输出. 现有一练习需求,问用户的姓名.年龄.工作.爱好 ,然后打印成以下格式 ------------ info of Alex Li ----------- Name : Alex Li ...
- linux下安装 zookeeper-3.4.9并搭建集群环境
本文主要记录作者在实践过程中实现在centos7环境下安装zookeeper并搭建集群的详细步骤,关于zookeeper本文将不做详细介绍,安装步骤详情如下: 前提准备:3台linux服务器(因为zo ...
- redis防止重复提交
public interface DistributedLock { boolean getLock(String var1, String var2, int var3);//加锁 void unL ...