poj2886
反素数范围不大,可以直接打表得
然后就是模拟移动的过程
我们可以用线段树优化,具体明天再说吧
const op:array[..] of longint=(,,,,,,,,,,,,,,
,,,,,,,,
,,,,,,,
,,,,,);
fac:array[..] of longint=(,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,
,,,,);
var tree:array[..] of longint;
a:array[..] of longint;
nam:array[..] of string[];
p,k,i,w,h,n,m:longint;
ch:char; procedure build(i,l,r:longint);
var m:longint;
begin
if l=r then
tree[i]:=
else begin
m:=(l+r) shr ;
build(i*,l,m);
build(i*+,m+,r);
tree[i]:=tree[i*]+tree[i*+];
end;
end; procedure work(i,l,r:longint);
var m:longint;
begin
if l=r then
tree[i]:=
else begin
m:=(l+r) shr ;
if k<=m then work(i*,l,m)
else work(i*+,m+,r);
tree[i]:=tree[i*]+tree[i*+]
end;
end; function sum(i,l,r:longint):longint;
var m:longint;
begin
if (<=l) and (k>=r) then
exit(tree[i])
else begin
m:=(l+r) shr ;
sum:=;
if m>= then sum:=sum+sum(i*,l,m);
if k>m then sum:=sum+sum(i*+,m+,r);
end;
end; function ask(i,l,r:longint):longint;
var m:longint;
begin
if l=r then exit(l)
else begin
m:=(l+r) shr ;
if w>tree[i*] then
begin
w:=w-tree[i*];
exit(ask(i*+,m+,r));
end
else exit(ask(i*,l,m));
end;
end; begin
while not eof do
begin
readln(n,k);
for i:= downto do
if (op[i]<=n) then
begin
p:=i;
break;
end; m:=n;
for i:= to n do
begin
nam[i]:='';
read(ch);
while ch<>' ' do
begin
nam[i]:=nam[i]+ch;
read(ch);
end;
readln(a[i]);
end;
build(,,n); for i:= to op[p]- do
begin
dec(m);
work(,,n);
if a[k]< then //分类讨论,找下一个人
begin
w:=-a[k];
h:=sum(,,n);
if w<=h then
begin
w:=h-w+;
k:=ask(,,n);
end
else begin
w:=(w-h-) mod m+;
w:=m-w+;
k:=ask(,,n);
end;
end
else begin
w:=a[k];
h:=sum(,,n);
if w<=m-h then
begin
w:=w+h;
k:=ask(,,n);
end
else begin
w:=w-(m-h);
w:=(w-) mod m+;
k:=ask(,,n);
end;
end;
end;
writeln(nam[k],' ',fac[p]);
end;
end.
poj2886的更多相关文章
- poj2886(线段树求序列第k小)
题目链接:https://vjudge.net/problem/POJ-2886 题意:n个人围成一个圈,每个人有姓名s和权值val两个属性,第一轮序号为k的人退出,并根据其val指定下一个人,val ...
- POJ-2886 Who Gets the Most Candies?---线段树+约瑟夫环
题目链接: https://cn.vjudge.net/problem/POJ-2886 题目大意: N个人围成一圈第一个人跳出圈后会告诉你下一个谁跳出来跳出来的人(如果他手上拿的数为正数,从他左边数 ...
- 【POJ2886】Who Gets the Most Candies?-线段树+反素数
Time Limit: 5000MS Memory Limit: 131072K Case Time Limit: 2000MS Description N children are sitting ...
- POJ-2886 Who Gets the Most Candies?(线段树+模拟)
题目大意:n个小孩按顺时针站成一圈,每次会有一个小孩出队(第一个出队的小孩已知),在他出队时会指定下一个出队的小孩,直到所有的小孩全部出队游戏结束.第p个出队的小孩会得到f(p)个糖果,f(p)为p的 ...
- POJ2886 Who Gets the Most Candies? 线段树 反素数
题意:有一群小朋友围成一个环,编号1,2,3…N.每个人手上握着一个非0的数字,首先第K个人出列,然后看他手上的数字,假设为m,则从下一个开始第m个人出列,一直如此.并设i为小于等于N的最大反素数,问 ...
- 【POJ2886】【线段树】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 ...
- poj2886线段树(单点修改,区间查询)
Who Gets the Most Candies? Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 11955 Acc ...
- poj2886 Who Gets the Most Candies?
思路: 先打反素数表,即可确定因子最多的那个数.然后模拟踢人的过程确定对应的人名.模拟的过程使用线段树优化加速. 实现: #include <cstdio> #include <cs ...
- poj分类 很好很有层次感。
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
随机推荐
- android应用一(调用WebServices)
搞了一个月的android,现学现卖,终于还是搞完了,停下来,整理思路,写写记录吧. 我们知道android访问远程数据库主要有两种协议,一种是SOAP,另外一种就是HTTP.而我们再看看WebSer ...
- mysql-distinct去重、mysql-group …
一.MYSQL-distinct用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记 ...
- Jenkins corbertura问题
最近在Jenkins上部署项目时遇到无法展示覆盖率测试报告的问题. build success后,出现配置的覆盖率报告存储位置not exists的失败问题,评估是Jenkins每次按照publish ...
- Windows Azure 试用 for 世纪互联运维
前一段时间申请由世纪互联运维的和谐版Windows Azure的邀请嘛下来,今天花费了点时间注册了一下 注册邀请函, 根据提示输入邀请码之后会收到以下邮件 中国地区可选择建立的虚拟机,SQL Serv ...
- 6 关于 Oracle NULL栏位和PL./SQL执行实验
今日有针对NULL值有了相关实验. 对NULL 值插入的讨论. 1, PL/SQL 中可以执行插入''或者NULL 的操作, 前提是栏位允许为空. 2, 可以对NULL进行一系列数据库运算. 如: ...
- max取得数组的最大值
var arr = [1,2,3,4,5,2,2,4,52,5,6,5,4,4]; var maxNum = Math.max.apply(Math,arr); var maxIndex = arr. ...
- linux创建守护进程
守护进程deamon 是一个后台进程,无需用户输入就能运行,用来在系统后台提供某种服务. 常见的守护进程有Wbe服务器.邮件服务器以及数据库服务器等等.守护进程不能控制终端,所以任何的输入和输出都需要 ...
- 简单的GDI+双缓冲的分析与实现
为什么要使用双缓冲绘制 在进行多图元绘制的时候: 因为是要一个一个画上去,所以每画一个图元,系统就要做一次图形的绘制操作,图形的重绘是很占用资源的,特别当需要重绘的图形数量很多的时候,所造成的消耗就特 ...
- red bottom shoes featured
最近做了一个红底高根鞋的电商网站 Cheap Red Bottom Shoes Christian Louboutin Loafers Bestsellers Christian Louboutin ...
- Fedora 21 中添加及更新源的命令
原文: Fedora 21 中添加及更新源的命令 fedora的软件源信息文件(*.repo)都是放在 /etc/yum.repos.d 目录下的.可以通过# ls -l /etc/yum.repos ...