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

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

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

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

 #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. Http Url Get请求方式需要对中文参数进行编码

    public static void main(String[] args) { try { String mytext = java.net.URLEncoder.encode("上海南站 ...

  2. B股

    B股的正式名称是人民币特种股票.它是以人民币标明面值,以外币认购和买卖,在中国境内(上海.深圳)证券交易所上市交易的外资股.B股公司的注册地和上市地都在境内.

  3. POJ2451 Uyuw's Concert(半平面交)

    题意就是给你很多个半平面,求半平面交出来的凸包的面积. 半平面交有O(n^2)的算法,就是每次用一个新的半平面去切已有的凸包,更新,这个写起来感觉也不是特别好写. 另外一个O(nlogn)的算法是将半 ...

  4. SGU 113

    113. Nearly prime numbers time limit per test: 0.25 sec. memory limit per test: 4096 KB Nearly prime ...

  5. **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)

    使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...

  6. C# 调用Windows API实现两个进程间的通信

    使用Windows API实现两个进程间(含窗体)的通信http://blog.csdn.net/huangxinfeng/article/details/5513608 从C#下使用WM_COPYD ...

  7. poj 1678 I Love this Game!

    思路:这题和博弈论的关系不大,主要是DP.记忆化搜索即可!!! 取的数一定是大于0的,所以将负数去掉!! 代码如下: #include<iostream> #include<cstd ...

  8. 用PostGreSQL实现三层(复习)

    modal DAL,BLL都是类库的形式 最终结果如下: 数据库代码: -- Table: student -- DROP TABLE student; CREATE TABLE student ( ...

  9. 开放api设计资料收藏

    REST设计 api设计范例http://www.ibm.com/developerworks/cn/web/1103_chenyan_restapi/index.html?ca=drs http:/ ...

  10. [iOS]ios archives 出现的是other items而不是iOS Apps的解决方案

    百度了一上午, 总是这样子. (利用cocoapods上传项目的时候, 总是这样无法点击UpLoad to App Store) 然后. 这样做. 就可以了!