当前位置: 首页 > 编程日记 > 正文

线段树专辑——pku 2886 Who Gets the Most Candies?

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

恩,分糖果,快乐的童年啊!

题目意思大概n个小孩围成一个圈,每个小孩手里有张卡片,记录着一个数字。开始从第k个孩子,该孩子离开圈子,然后告诉别人他手里的数字,接下来便从位于该孩子的位置加上孩子手中的数字的孩子开始,直到所有的孩子都离开了圈子,游戏便结束。每个跳出圈子的孩子都能得到一定的糖果,数目是他跳出圈子的顺序数的因子数之和。 例如第6个跳出的孩子能得到(1,2,3,6)四个糖果。

这个游戏,其实和猴子选大王是一样的!只要注意好求解相对位置即可,所谓相对位置,例如:

a,b,c,d四个人,a对应1,b对应2,c对应3,d对应4.但是当b不在以后,c便相对的为2,d也相对的为3.

然后利用线段树,轻松解决!

这里关键是学习了一下反素数表。

反素数:

对于任何正整数x,其约数的个数记做g(x)。例如g(1)=1,g(6)=4。
如果某个正整数x满足:对于任意i(0 < i < x),都有g(i) < g(x),则称x为反素数。

而反素数表就是对应上面反素数所建立的一张表,这张表好处多多,例如给你一个n,你便可以轻松的找出1~~n范围内,谁的因子数之和最多!

给出个简单的打表方法

View Code
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int dp[600001];

int main()
{
int i,j;
freopen("D:\\in.txt","w",stdout);
memset(dp,0,sizeof(dp));
for(i=1;i<=500000;i++)
{
for(j=1;j<=500000;j++)
{
if(i*j<=600000)
dp[i*j]++;
}
}
int max=0;
for(i=2;i<=600000;i++)
{
if(dp[i]>max)
{
max=dp[i];
cout<<i<<",";
}
}
cout<<endl<<endl;
max=0;
for(i=2;i<=600000;i++)
{
if(dp[i]>max)
{
max=dp[i];
cout<<dp[i]<<",";
}
}
return 0;
}

这是一个效率很低的程序,只是为了这道题打表而已。

接下来模拟猴子选大王就是了,当给定一个n的时候,先找出1~~n内因子数之和最大的那个数,因子数之和便是candy的答案,假设那个数是m,那么模拟到第m个人的时候,那个人便也是答案!

View Code
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int max_turn[40]={1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,5040,7560,10080,15120,20160,25200,27720,45360,50400,55440,83160,110880,166320,221760,277200,332640,498960,554400};
int max_candy[40]={1,2,3,4,6,8,9,10,12,16,18,20,24,30,32,36,40,48,60,64,72,80,84,90,96,100,108,120,128,144,160,168,180,192,200,216};

struct child
{
char name[10];
int pos;
};

child num[500001];
int n,k,pos;

struct node
{
int l;
int r;
int left;
};

node tree[2500000];

void build(int i,int l,int r)
{
tree[i].l=l;
tree[i].r=r;
tree[i].left=r-l+1;
if(l==r)
return;
int mid=(l+r)/2;
build(2*i,l,mid);
build(2*i+1,mid+1,r);
}

void updata(int i,int w)
{
if(tree[i].l==tree[i].r)
{
tree[i].left--;
pos=tree[i].l; //记录目前的实际位置
return;
}
if(tree[2*i].left>=w)
updata(2*i,w);
else if(tree[2*i+1].left>=w-tree[2*i].left)
updata(2*i+1,w-tree[2*i].left);
tree[i].left=tree[2*i].left+tree[2*i+1].left;
}

int main()
{
int i,turn,&mod=tree[1].left,candy;
freopen("D:\\in.txt","r",stdin);
while(scanf("%d%d",&n,&k)==2)
{
build(1,1,n);
for(i=1;i<=n;i++)
{
scanf("%s %d",num[i].name,&num[i].pos);
}
i=0;
while(max_turn[i]<=n) //寻找最大的n'
i++;
i--;
candy=max_candy[i]; //记录最多的糖果
turn=max_turn[i]; //第max_turn[i]出来的人将得到最多的糖果
pos=0;
num[0].pos=0;
for(i=0;i<turn;i++)
{
if(num[pos].pos>0) //求解相对剩余位置
{
k=((k+num[pos].pos-1)%mod+mod)%mod;
if(k==0)
k=mod;
}
else
{
k=((k+num[pos].pos)%mod+mod)%mod;
if(k==0)
k=mod;
}
updata(1,k);
}
printf("%s %d\n",num[pos].name,candy);
}
return 0;
}



转载于:https://www.cnblogs.com/ka200812/archive/2011/11/14/2248914.html

相关文章:

【jsp】通过get和post传值的区别

GET与POST的区别&#xff1a; GET方式提交表单&#xff0c;请求的参数在请求的头部&#xff0c;可以通过request.getQueryString()获取到请求参数及其参数值&#xff1b;POST方式提交表单&#xff0c;请求的参数在请求体中&#xff0c;所以request.getQueryString()方法无法获…

php获取输入流

uc中的用到的代码(在api/uc.php)代码&#xff1a; $post xml_unserialize(file_get_contents(php://input));&#xfeff; php手册&#xff08;http://cn.php.net/manual/zh/wrappers.php.php&#xff09;说明: php://input allows you to read raw data from the request bod…

微信小程序实例源码大全demo下载

怎么本地测试微信小程序实例源码 1.下载源码2.打开微信开发者工具3.添加项目->选择本项目目录->编译执行微信小程序实例源码大全 微信小程序游戏类demo&#xff1a;识色&#xff1b;从相似颜色中挑选不同的一个 源码链接&#xff1a;http://www.wxapp-union.com/forum.ph…

RabbitMQ 学习

参考&#xff1a;https://www.rabbitmq.com/getstarted.html 先在本地安装RabbitMQ 组件(需要安装Erlang组件&#xff09;&#xff0c;启动服务。 激活 RabbitMQs Management Plugin 使用RabbitMQ 管理插件&#xff0c;可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。 打…

怎样提高WebService的性能

服务器端WebService程序using System.Runtime.Serialization.Formatters.Binary;using System.IO;using System.IO.Compression;using System.Data.SqlClient;………public class Service1 : System.Web.Services.WebService{[WebMethod(Description "直接返回 DataSet 对…

【jsp】jsp的内置对象(部分)

一、response 1、setStatus:设置响应状态码。 代码实现&#xff1a; response.setStatus(550); 更改的位置如图&#xff1a; 2、sendRedirect:服务器端跳转 代码实现&#xff1a; response.sendRedirect("Success.jsp"); 3、setContentRType:设置返回内容类型…

linux tar的使用方法

tar [-cxtzjvfpPN] 文件与目录 ....参数&#xff1a;-c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b;-x &#xff1a;解开一个压缩文件的参数指令&#xff01;-t &#xff1a;查看 tarfile 里面的文件&#xff01;特别注意&#xff0c;在参数的下达中&a…

关闭webstorm自动保存,并显示文件未保存标识

1.取消自动保存 2.显示编辑状态设置&#xff1a; 转载于:https://www.cnblogs.com/webSong/p/8807732.html

【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符

SQL函数&#xff1a;字符串中提取数字&#xff0c;英文&#xff0c;中文&#xff0c;过滤重复字符 --提取数字IF OBJECT_ID(DBO.GET_NUMBER) IS NOT NULLDROP FUNCTION DBO.GET_NUMBERGOCREATE FUNCTION DBO.GET_NUMBER(S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATI…

【java】实现数据在页面之间传输

传数据页面&#xff1a; 方法&#xff1a;使用a标签传输数据 格式&#xff1a; <a name"C03S417" href"getRoomFinal.jsp?roomNumberC03S415">入住 </a> 接收数据页面&#xff1a; 方法&#xff1a; &#xff08;1&#xff09;使用java代…

Android画图学习总结(四)——Animation(上)

随着对Drewable的深入了解&#xff0c;发现了Drawable更加强大的功能&#xff1a;显示Animation。Android SDK介绍了2种Animation&#xff1a; Tween Animation&#xff1a;通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果 Frame Animation&#xff1a;顺序播…

ES6 Rest参数

Rest参数接收函数的多余参数&#xff0c;组成一个数组&#xff0c;放在形参的最后&#xff0c;形式如下&#xff1a; function func(a, b, ...theArgs) { // ... }rest参数只包括那些没有给出名称的参数&#xff0c;注意&#xff0c;rest参数之后不能再有其它参数&#xff08;即…

Data - 深入浅出学统计 - 下篇

本文是已读书籍的内容摘要&#xff0c;少部分有轻微改动&#xff0c;但不影响原文表达。 &#xff1a;以漫画形式来讲解最基本的统计概念和方法。 ISBN: 9787121299636https://book.douban.com/subject/26906845/2 - 探寻参数 2.1 - 中心极限定理&#xff08;Central Limit The…

[网摘学习]在Ubuntu上安装和配置OpenStack Nova之二

再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.html此处仅供学习记录,版权归原作者. OpenStack 是 Python 2.6 写的&#xff0c;CentOS 5.6 上默认的是 Python 2.4 的环境…

【Linux】Linux computer文件夹下各种文件的作用

1、bin&#xff1a;放可执行文件&#xff0c;一些Linux的命令 注&#xff1a;Linux的命令最终都是一些程序&#xff0c;这些程序都放在bin目录和sbin目录 2、boot : 启动目录 3、dev : 存放设备 注&#xff1a;在Linux中把所有硬件都叫设备 4、etc&#xff1a; 安装软件的各种…

售前十年,两种人生

售前十年&#xff0c;两种人生,多重感悟! 售前第一年&#xff1a; 你 开始会觉得兴奋、紧张、恐慌。你对客户的提问&#xff0c;会有机械性的反应&#xff0c;试着说服他&#xff0c;但客户的表现总让你很茫然&#xff0c;你总是想把自己装扮的像一个专家&#xff0c;甚至故意打…

点击返回上一页面

οnclick"javascript:window.history.back(-1);" 方法一、以按钮点击的方式实现&#xff1a; <input type"button" name"Submit" value"返回上一页" οnclick"javascript:window.history.back(-1);"> 或者 &l…

【Linux】Linux 简单操作指令之磁盘管理

注&#xff1a;有关Linux全面的命令可以到网站&#xff1a;http://linux.51yip.com/查询 1、pwd : 显示当前所在位置 2、ll : 显示当前目录下的内容 注&#xff1a; (1)如果开头为一个 d 则为一个文件夹 如果开头为 - 则是一个文件 (2)ll后可以跟上一个目录&#xff0c;表示显…

浅说——九讲背包之01背包

所谓九讲&#xff0c;也就是&#xff1a;0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包&#xff1a; [问题描述]&#xff08;经典&#xff09;有一个吝啬的地主&#xff0c;不愿…

msvcrt.lib和LIBCD.lib链接冲突

今天在移植一个开源代码到windows的VC6工程&#xff0c;编译时出现了这些奇怪的LINK错误。 msvcrt.lib(MSVCRT.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _tolower already defined in LIBCD.lib(to…

Oracle 小知识点

-- 表create table test (names varchar2(12),dates date,num int,dou double);-- 视图create or replace view vi_test asselect * from test;-- 同义词create or replace synonym aafor dbusrcard001.aa;-- 存储过程create or replace produce dd(v_id in employee.empoy…

CC2540获取本机MAC地址

//获取自身蓝牙地址void GetOwnAddr(void){ static uint8 ownAddress[6] {0}; ownAddress[5] XREG(0x780E); ownAddress[4] XREG(0x780F); ownAddress[3] XREG(0x7810); ownAddress[2] XREG(0x7811); ownAddress[1] XREG(0x7812); ownAddress[0] XREG(0x7813);}转载于:h…

mysql的小练习

建立如下表&#xff1a; 建表语句&#xff1a; class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engineinnodb default charsetutf8;student表创建语句 create table student(-> sid int not null auto_inc…

针对 Windows Phone 7 上的独立存储的 Sterling

http://msdn.microsoft.com/zh-cn/magazine/hh205658.aspx转载于:https://www.cnblogs.com/thankchunzi/archive/2011/11/18/2254416.html

【Linux】Linux简单操作之文件管理

1、mkdir : 创建文件夹 2、rm &#xff1a; 删除文件或目录 注&#xff1a; 凡是涉及到路径&#xff0c;绝对路径相对路径都可以 &#xff08;1&#xff09;直接使用 rm 文件名可以删除文件&#xff0c;但删除不了文件夹 &#xff08;2&#xff09;删除时会有一行提示 如果…

phpmyadmin另类拿shell

发现了个PHPMYADMIN 结果弱口令登陆进去 爆出绝对路径 然后执行SQL语句发现导出SHELL的时候却发现缺少了import.php这个文件 结果没办法执行MYSQL语句&#xff01; 然后本地测试了下 发现另外的方法phpMyAdmin/sql.php?dbtest&tablea&printview1&sql_queryselect%…

第二章、IP协议详解

一、IP服务的的特点 IP协议是TCP/IP协议族的动力&#xff0c;他为上层协议提供的无状态无连接&#xff0c;不可靠的服务。 无状态是指IP通信双方不同步传输数据的状态信息&#xff0c;因此所有的ip数据报的发送&#xff0c;传出和接受都是相互独立的&#xff0c;没有上下文的联…

为绑定的NSArrayController设置默认的排序

当NSArrayController与一个class或者entity进行绑定&#xff08;Binding&#xff09;之后&#xff0c;可以为这个NSArrayController设置默认的排序。通过在Bindings Insepector中选择Controller Content Parameters -> Sort Descriptor进行默认排序的设定。 1、在.h文件中创…

快速求斯特林数总结(洛谷模板题解)

题目链接 第一类斯特林数行第一类斯特林数列第二类斯特林数行第二类斯特林数列 求一行第一类斯特林数 由第一类斯特林数的推论&#xff0c;\(x^{\overline{n}}\sum_i\begin{bmatrix}n\\i\end{bmatrix}x^i\)&#xff0c;分治FFT计算上升幂即可 \(O(nlog^2n)\)。 求一列第一类斯特…

【Linux】Linux简单操作之系统管理

1、date &#xff1a; 显示系统时间 注 &#xff1a;系统操作与所在的文件夹无关&#xff0c;在哪都能操作。 2、su &#xff1a; 切换账号 注&#xff1a; &#xff08;1&#xff09;如果高级用户切换低级用户可以直接切换&#xff0c;不用密码 &#xff08;2&#xff09;…