这道题综合性挺强的,又牵扯到数论,又有线段树。

线段树维护的信息就是区间中有多少个人没跳出去,然后计算出下一个人是剩下的人中第几个。

我在这调程序调了好久,就是那个模来模去的弄得我头晕。

不过题确实是好题,给赞。

 #include <cstdio>
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
using namespace std; const int maxn = + ;
int n, k;
int sum[maxn << ]; void build(int o, int L, int R)
{
if(L == R) { sum[o] = ; return; }
int M = (L + R) / ;
build(o*, L, M);
build(o*+, M+, R);
sum[o] = sum[o*] + sum[o*+];
} int update(int o, int L, int R, int p)
{
if(L == R) { sum[o] = ; return L; }
int M = (L + R) / ;
int ans;
if(sum[o*] >= p) ans = update(o*, L, M, p);
else ans = update(o*+, M+, R, p-sum[o*]);
sum[o] = sum[o*] + sum[o*+];
return ans;
} const int maxp = ;
int prime[maxp], pcnt = ;
bool vis[maxp]; void prime_table()
{
int m = sqrt(maxp);
for(int i = ; i <= m; i++) if(!vis[i])
for(int j = i * i; j < maxp; j += i) vis[j] = true;
for(int i = ; i < maxp; i++) if(!vis[i]) prime[pcnt++] = i;
} int F(int n)
{
int ans = ;
for(int i = ; i < pcnt && n > ; i++) if(n % prime[i] == )
{
int c = ;
while(n % prime[i] == ) { n /= prime[i]; c++; }
ans *= c + ;
}
if(n > ) ans <<= ;
return ans;
} int next[maxn];
char stu[maxn][]; int main()
{
//freopen("in.txt", "r", stdin); prime_table(); while(scanf("%d%d", &n, &k) == )
{
build(, , n - );
int _max = , id;
for(int i = ; i < n; i++) { scanf("%s%d", stu[i], &next[i]); } int pos = k - ;
for(int i = ; i <= n; i++)
{
int t = update(, , n - , pos + );
int f = F(i);
if(f > _max)
{
_max = f;
id = t;
}
if(i == n) break;
int MOD = n - i;
if(next[t] < ) next[t]++; //负数的情况还要有一点小改动,在这坑了好久
pos = (((pos + next[t] - ) % MOD) + MOD) % MOD;
}
printf("%s %d\n", stu[id], _max);
} return ;
}

代码君

POJ (线段树) Who Gets the Most Candies?的更多相关文章

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

    POJ 2886 题目大意是说有n个人围成一圈,游戏的起点是k,每个人持有一个数字(非编号)num,每次当前的人退出圈,下一个人是他左边的第num个(也就是说下一个退出的是k+num, k可以为负数, ...

  2. (中等) 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 ...

  3. poj 2886 (线段树+反素数打表) Who Gets the Most Candies?

    http://poj.org/problem?id=2886 一群孩子从编号1到n按顺时针的方向围成一个圆,每个孩子手中卡片上有一个数字,首先是编号为k的孩子出去,如果他手上的数字m是正数,那么从他左 ...

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

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

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

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

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

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

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

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

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

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

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

    按顺时针给出n个小孩,n个小孩每个人都有一个纸,然后每个人都有一个val,这个val等于自己的因子数,如果这个val是正的,那就顺时针的第val个孩子出去,如果是负的话,就逆时针的第val个孩子出去, ...

随机推荐

  1. asp.net的sessionState节点详解

    web.config关于sessionState节点的配置方案,sessionState有四种模式:off,inProc,StateServer,SqlServer. 1.off模式 从字面上就可以看 ...

  2. CSS预处理器实践之Sass、Less大比拼[转]

    什么是CSS预处理器? CSS可以让你做很多事情,但它毕竟是给浏览器认的东西,对开发者来说,Css缺乏很多特性,例如变量.常量以及一些编程语法,代码难易组织和维护.这时Css预处理器就应运而生了.Cs ...

  3. json 处理

    //String sssssString = "{"response":{"data":[{"address":"南京市 ...

  4. (转)Linux进程间通信

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢nonoob纠错 我们在Linux信号基础中已经说明,信号可以看作一种粗糙的进 ...

  5. iOS搜索栏

    百度云连接:http://pan.baidu.com/s/1pJLzDFX

  6. POJ 1988

    #include<iostream> #include<stdio.h> #include<algorithm> #define MAXN 30005 using ...

  7. solr的collection,shard,replica,core概念

    一.collection 1.由多个cores组成一个逻辑索引叫做一个collection.一个collection本质上是一个可以跨越多个核的索引,同时包含冗余索引. 2.collection由不同 ...

  8. css系列-间隔与间距实例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 【蛙蛙推荐】Lucene.net试用

    [蛙蛙推荐]Lucene.net试用   [简介] lucene.net好多人都知道的吧,反正我是最近才好好的看了一下,别笑我拿历史当新闻哦,不太了解Lucence的朋友先听我说两句哦.Lucene的 ...

  10. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-3]

    引入Struts2 在pom.xml中加入jar包 <!-- struts2 --> <dependency> <groupId>org.apache.struts ...