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

时间:2022-10-21 18:24:28

http://poj.org/problem?id=2886

一群孩子从编号1到n按顺时针的方向围成一个圆,每个孩子手中卡片上有一个数字,首先是编号为k的孩子出去,如果他手上的数字m是正数,那么从他左边(顺时针)开始第m个孩子出去,如果是负的

那么从他的右边(也就是逆时针)开始第m个孩子出去~~~一直到所有的孩子出去,另外,第p个出去的孩子可以得到的糖果数量是p的约数个数,问能得到最多糖果的孩子的名字和得到的糖果数目

关于公约数最多的问题,可以利用到反素数,可以首先先打表反素数和对应的约数个数,找出约数最多的次数p,p肯定是不大于n的,然后就是模拟孩子出去的情况,只要模拟p次就行

然后用线段树模拟,与上一题插队差不多,记录下每个区间的人数,每次的顺序k表示第k个有人的区间更新为空

code

 #include<cstdio>
using namespace std;
struct point {
int l,r;
int mark;//记录每个区间人数
};
point tree[*];
char jjc[][];
int a[],pos;
int prime[]={ //反素数
,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,, };
int numb[]={ //对应的约数个数
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,
};
void build (int i,int left,int right)
{
tree[i].l=left,tree[i].r=right;
tree[i].mark=tree[i].r-tree[i].l+;
if (left==right) { return ;}
int mid=(left+right)/;
build(i*,left,mid);
build(i*+,mid+,right);
}
void update(int i,int ans)
{
if (tree[i].l==tree[i].r)
{
pos=tree[i].l;
tree[i].mark--;
return ;
}
if (ans<=tree[i*].mark)
update(i*,ans);
else
update(i*+,ans-tree[i*].mark);
tree[i].mark=tree[i*].mark+tree[i*+].mark;
}
int main()
{
int n,k,i,w,m;
while (scanf("%d %d",&n,&k)==)
{
for (i=;i<=n;i++)
scanf("%s %d",&jjc[i],&a[i]);
build(,,n);
w=;
for(i=;prime[i]<=n;i++)w=i;
pos=;m=prime[w];
a[]=;
while (m--)
{
int num=tree[].mark;
if (a[pos]>)
k=((k+a[pos]-)%num+num)%num+;
else
k=((k+a[pos]-)%num+num)%num+;
update(,k);
}
printf("%s %d\n",jjc[pos],numb[w]);
}
return ;
}

poj 2886 (线段树+反素数打表) Who Gets the Most Candies?的更多相关文章

  1. poj 2886 线段树&plus;反素数

    Who Gets the Most Candies? Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 12744   Acc ...

  2. poj 2886 线段树的更新&plus;反素数

    Who Gets the Most Candies? Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , ...

  3. POJ2886 Who Gets the Most Candies&quest; 线段树 反素数

    题意:有一群小朋友围成一个环,编号1,2,3…N.每个人手上握着一个非0的数字,首先第K个人出列,然后看他手上的数字,假设为m,则从下一个开始第m个人出列,一直如此.并设i为小于等于N的最大反素数,问 ...

  4. POJ 2886 线段树单点更新

    转载自:http://blog.csdn.net/sdj222555/article/details/6878651 反素数拓展参照:http://blog.csdn.net/ACdreamers/a ...

  5. 【POJ2886】Who Gets the Most Candies&quest;-线段树&plus;反素数

    Time Limit: 5000MS Memory Limit: 131072K Case Time Limit: 2000MS Description N children are sitting ...

  6. Who Gets the Most Candies&quest;(线段树 &plus; 反素数 )

    Who Gets the Most Candies? Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:%I64d &am ...

  7. POJ 2828 线段树&lpar;想法&rpar;

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 15422   Accepted: 7684 Desc ...

  8. poj 3468&lpar;线段树&rpar;

    http://poj.org/problem?id=3468 题意:给n个数字,从A1 …………An m次命令,Q是查询,查询a到b的区间和,c是更新,从a到b每个值都增加x.思路:这是一个很明显的线 ...

  9. POJ——3264线段树

    题目: 输入两个数(m,n),m表示牛的头数,n表示查询的个数.查询时输入两个数(x,y),表示查询范围的起始值和终止值,查询结果是,这个区间内牛重量的最大值减去牛重量的最小值,数量级为1000,00 ...

随机推荐

  1. C&plus;&plus; 系列:深拷贝与浅拷贝

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  2. abap常用函数

    1.读取生产订单状态函数 call function 'STATUS_READ'           exporting             client           = sy-mandt ...

  3. Python Web实战 - 基于Flask实现的黄金点游戏

    一.简介 团队成员: 领航者:张旭 驾驶员:张国庆 项目简介: 项目名称:基于B/S模式的黄金点游戏 采用技术: 后端:Python + Sqlite3 前端:HTML + CSS + JS + Bo ...

  4. Mako

    from:  http://www.yeolar.com/note/2012/08/26/mako-usage/ Python模板库Mako的用法(选译自官方文档) Yeolar 2012-08-26 ...

  5. ADO&period;NET 快速入门(二):执行命令

    Commands发出针对数据库的数据存储动作.例如,你可以执行一条命令插入或者删除数据.获取更多从数据库移动数据相关的信息,请参考“Update a Database from a DataSet”. ...

  6. android控制之 adb shell &lpar;已完成,不定期增加内容&rpar;

    第一步:首先,下载adb1.0.32.zip,里面有如下图的内容: 第二步:解压缩,复制Adb.exe,和fastboot.exe到System32,注意AdbWinUsbApi.dll,AdbWin ...

  7. 20164304姜奥——Exp1 PC平台逆向破解

    1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,ge ...

  8. metools,个人工具站点分享

    需要[加密/解密][编码/解码][生成二维码]的时候不用再进百度点广告~ 也不需要去收藏夹找网址~ 我的目的大概就是如此. 项目地址:https://github.com/yimogit/metool ...

  9. js创建并下载文件

    先上代码: function createAndDownloadFile(fileName, content) { var aTag = document.createElement('a'); va ...

  10. golang 六宫格、九宫格头像生成

    图片示例就不传了,在原WordPress上. //Merge6Grid 6宫格 //rule NO1:至少3张图 最多6张图 // NO2:第一张大小 60*60 其他大小 28*28 间隔4px 合 ...