思路:

对于 k 位置的 孩子,他的 数字是 +num 那么因为他自己本身是要被踢走的,所以相对位置 为k= k+num-1

如果数字是 -num,那么按正着数就没影响,k=k-num。线段树存储当前区间共有多少个人,每一次找到第k (前面有k-1个)个孩子,经过的区间都要 -1,然后记录被踢走的孩子编号

对于第几个出去是最优可以预处理,网上看到了反素数,反素数 是  如果一个数  x  所有   y<x的   y的因子都小于x则称x为反素数,很明显就是小于n的最大的反素数就是我们要的答案。反素数可以预处理打表。

#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include <iostream>
#define N 500050
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define debug(x) printf(#x"= %d\n",x);
using namespace std;
struct node
{
char s[];
int va;
}s[N];
int cprim[] = {,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
int fac[] = {,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
int sum[N*];
void build(int l,int r,int i)
{
sum[i]=r-l+;
if(l!=r)
{
int mid=(l+r)>>;
build(l,mid,L(i));
build(mid+,r,R(i));
}
}
int update(int l,int r,int p,int i)
{
sum[i]--;
if(l==r)
return l;
int mid=(l+r)>>;
if(p<=sum[L(i)])
return update(l,mid,p,L(i));
else return update(mid+,r,p-sum[L(i)],R(i));
}
int main() {
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
for(int i=;i<=n;++i)
scanf(" %s %d",s[i].s,&s[i].va);
build(,n,);
s[].va=;
int now=;
while(cprim[now]<=n)now++;
now--;
int pre=;
for(int i=;i<=cprim[now];++i)
{
if(s[pre].va>)
{
k=(k+s[pre].va-)%sum[];
if(k<=)k+=sum[];
}else
{
k=(k+s[pre].va)%sum[];
if(k<=)k+=sum[];
}
// debug(k);
pre=update(,n,k,);
}
printf("%s %d\n",s[pre].s,fac[now]);
}
return ;
}

POJ 2886 Who Gets the Most Candies?的更多相关文章

  1. 线段树(单点更新) POJ 2886 Who Gets the Most Candies?

    题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...

  2. poj 2886 Who Gets the Most Candies?(线段树和反素数)

    题目:http://poj.org/problem?id=2886 题意:N个孩子顺时针坐成一个圆圈且从1到N编号,每个孩子手中有一张标有非零整数的卡片. 第K个孩子先出圈,如果他手中卡片上的数字A大 ...

  3. POJ 2886 Who Gets the Most Candies? 线段树

    题目: http://poj.org/problem?id=2886 左右转的果断晕,题目不难,关键是准确的转啊转.因为题目要求输出约数个数最多的数,所以预处理[1,500000]的约数的个数就行了. ...

  4. POJ 2886 Who Gets the Most Candies? (线段树)

    [题目链接] http://poj.org/problem?id=2886 [题目大意] 一些人站成一个圈,每个人手上都有一个数字, 指定从一个人开始淘汰,每次一个人淘汰时,将手心里写着的数字x展示 ...

  5. (中等) POJ 2886 Who Gets the Most Candies? , 反素数+线段树。

    Description N children are sitting in a circle to play a game. The children are numbered from 1 to N ...

  6. POJ 2886.Who Gets the Most Candies? -线段树(单点更新、类约瑟夫问题)

    线段树可真有意思呢续集2... 区间成段的替换和增减,以及区间求和等,其中夹杂着一些神奇的操作,数据离散化,简单hash,区间异或,还需要带着脑子来写题. 有的题目对数据的操作并不是直接按照题面意思进 ...

  7. POJ 2886 Who Gets the Most Candies?(线段树&#183;约瑟夫环)

    题意  n个人顺时针围成一圈玩约瑟夫游戏  每一个人手上有一个数val[i]   開始第k个人出队  若val[k] < 0 下一个出队的为在剩余的人中向右数 -val[k]个人   val[k ...

  8. POJ 2886 Who Gets the Most Candies?(反素数+线段树)

    点我看题目 题意 :n个小盆友从1到n编号按顺时针编号,然后从第k个开始出圈,他出去之后如果他手里的牌是x,如果x是正数,那下一个出圈的左手第x个,如果x是负数,那出圈的是右手第-x个,游戏中第p个离 ...

  9. POJ 2886 Who Gets the Most Candies? 线段树。。还有方向感

    这道题不仅仅是在考察线段树,还他妹的在考察一个人的方向感.... 和线段树有关的那几个函数写了一遍就对了,连改都没改,一直在转圈的问题的出错.... 题意:从第K个同学开始,若K的数字为正 则往右转, ...

随机推荐

  1. NEU校园网登录器

    http://www.cnblogs.com/weidiao/p/5124106.html 改自学长的博客. 我们的目标是写一个程序实现自动登录校园网.而这基于的是表单的post机制. 输入校园网网址 ...

  2. bootstrap学习笔记<七>(图标,图像)

    图像 bootstrap为图像预加载提供了很简洁的样式.(CDN:http://placehold.it/140x140:) PS:该CDN链接后的140x140可以根据网站需要更换合适的尺寸.例如: ...

  3. JVM系列三:JVM参数设置、分析

    不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java ...

  4. Python 调用自定义包

    创建包 # mkdir -p /python/utils # touch /python/utils/__init__.py # vi /python/utils/Log.pyimport timed ...

  5. Css3_浏览器支持

    #box{     color:red;    ⁄* 所有浏览器都支持 *⁄      color:red !important;   ⁄* Firefox.IE7支持 *⁄    _color:re ...

  6. 与MySQL的零距离接触 - 慕课网

    课程链接:与MySQL的零距离接触 环境配置: windows下安装mysql Download MySQL Installer for windows 课程目录 第1章 初涉MySQL     1- ...

  7. Android 为PopupWindow设置动画效果

    首先定义显示效果的动画文件: <?xml version="1.0" encoding="utf-8"?> <set xmlns:androi ...

  8. testng标签运行顺序

    testng的annotations运行顺序为: @BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @AfterMethod @AfterClas ...

  9. 那些年独自踩过的flascc的坑

    [一个工程中使用多个flascc编译出来的swc] 1.如果是swf工程, 工程中同时使用多个flascc编译出来的swc, 可以顺利通过. 2.如果是swc工程, 工程中同时使用多个flascc编译 ...

  10. sqlserver计算表使用大小sql

    ) create table #spt_space ( ) null, [rows] int null, ) null, ) null, ) null, ) null ) set nocount on ...