约瑟夫问题的升级版,每次出去的是前一个出去的人位置+手上的数字(正往前,负往后)。第i个出去的人拿的糖是i的约数的个数。求拿糖最多的人和他的糖果数。

分析

线段树单点更新,反素数。

我竟然WA在了反素数少了几个QAQ

代码

#include<cstdio>
#include<cstring>
#define N 500002
#define mid int m=l+((r-l)>>1)
#define lson l,m,node<<1
#define rson m+1,r,node<<1|1
using namespace std; int v[N];
char name[N][];
int n,k;
int sum[N<<]; int rprim[]= {,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,};//反素数
int nprim[]= {,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,};//反素数的约数个数 void build(int l,int r,int node)
{
sum[node]=r-l+;//sum储存这个区间有多少个数
if(l<r)
{
mid;
build(lson);
build(rson);
}
}
int out(int l,int r,int node,int k)
{
sum[node]--;//这个区间减少一个数
if(l==r)
return l;//返回这个减少的数的原始下标
mid;
if(k<=sum[node<<])//要找的第k个数小于等于左半区间的个数
return out(lson,k);//就递归左子树
else
return out(rson,k-sum[node<<]);//否则就在右子树,且k-左子树的个数
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
memset(name,,sizeof(name));//清空名字
for(int i=; i<=n; i++)
scanf("%s%d",name[i],&v[i]);
build(,n,); int tn=n,now,p=;
while(rprim[p]<=n)p++;//找出n里最大的反素数 for(int i=; i<rprim[p-]; i++)//反素数前的都出队
{
now=out(,n,,k);//当前出队的序号
tn--;//剩下的人数
if (v[now]>)//向前数
k=(k-+v[now])%tn;//先减去本身这个位置 然后往前v个 再取模
else
k=((k+v[now])%tn+tn)%tn;//直接往后 然后要取模再取模保证正数
if (k==) k=tn;//如果刚好是tn 取模会变成0
}
now=out(,n,,k);//得到第最大的反素数个出队的人的序号
printf("%s %d\n",name[now],nprim[p-]);
}
return ;
}

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

  1. bzoj 2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...

  2. 【链表】BZOJ 2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 382  Solved: 111[Submit][S ...

  3. BZOJ2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 284  Solved: 82[Submit][St ...

  4. BZOJ2293: 【POJ Challenge】吉他英雄

    2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 59[Submit][Stat ...

  5. BZOJ2287: 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 254  Solved: 140[Submit][S ...

  6. BZOJ2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 126  Solved: 90[Submit][Sta ...

  7. BZOJ2296: 【POJ Challenge】随机种子

    2296: [POJ Challenge]随机种子 Time Limit: 1 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 114  Solv ...

  8. BZOJ2292: 【POJ Challenge 】永远挑战

    2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 513  Solved: 201[Submit][ ...

  9. 【POJ 1125】Stockbroker Grapevine

    id=1125">[POJ 1125]Stockbroker Grapevine 最短路 只是这题数据非常水. . 主要想大牛们试试南阳OJ同题 链接例如以下: http://acm. ...

随机推荐

  1. javascript判断回文数

    "回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如"我为人人,人人为我"等.在数学中也有这样一类数字有这样的特征,成为回文数(pa ...

  2. hdu-5497 Inversion(滑动窗口+树状数组)

    题目链接: Inversion Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  3. java9-9 匿名内部类

    1. 匿名内部类 就是内部类的简化写法. 前提:存在一个类或者接口 这里的类可以是具体类也可以是抽象类. 格式: new 类名或者接口名(){ 重写方法; } new Xxx()是创建了一个对象,而抽 ...

  4. ant 自动构建血泪史

    1.  android.bat update project -p . -t xxx 其中: xxx 为 targetid 特别注意的是:  targetid 不等于 API Level.... 2. ...

  5. VideoView 播放资源目录raw下的视频

    你把影片copy到res/raw下!檔名小寫加底線,例如:default_video.3gp,在程式碼裡指定uri路徑 String uri = "android.resource://&q ...

  6. SpringMVC常用接收Json的两种方法

    @RequestBody JSONObject requestJson @RequestBody User user 一种是自定义加注解,由Spring负责绑定,一种是使用通用的JSONObject

  7. 通过输入卡号前10位数字判断是哪个银行的卡和类型(储蓄卡or信用卡)

    19位银行卡(包括储蓄卡和信用卡)可以通过前10位数字判断是哪个银行的卡和类型(储蓄卡or信用卡) 16位银行卡(包括储蓄卡和信用卡)可以通过前10位数字判断是哪个银行的卡和类型(储蓄卡or信用卡) ...

  8. 报错"the geometry has no Z values"处理

    );  //将Z值设置为0 //IPoint point = (IPoint)pGeo; //point.Z = 0; } else            {                IZAwa ...

  9. Java连接Elasticsearch集群

    package cn.test; import java.net.InetAddress; import java.net.UnknownHostException; import org.elast ...

  10. Nginx+UWSGI+Django配置全过程

    重度参阅 原理+实战http://zhou123.blog.51cto.com/4355617/1688434 原理http://www.cnblogs.com/fnng/p/5268633.html ...