反素数范围不大,可以直接打表得
然后就是模拟移动的过程
我们可以用线段树优化,具体明天再说吧

 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的更多相关文章

  1. poj2886(线段树求序列第k小)

    题目链接:https://vjudge.net/problem/POJ-2886 题意:n个人围成一个圈,每个人有姓名s和权值val两个属性,第一轮序号为k的人退出,并根据其val指定下一个人,val ...

  2. POJ-2886 Who Gets the Most Candies?---线段树+约瑟夫环

    题目链接: https://cn.vjudge.net/problem/POJ-2886 题目大意: N个人围成一圈第一个人跳出圈后会告诉你下一个谁跳出来跳出来的人(如果他手上拿的数为正数,从他左边数 ...

  3. 【POJ2886】Who Gets the Most Candies?-线段树+反素数

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

  4. POJ-2886 Who Gets the Most Candies?(线段树+模拟)

    题目大意:n个小孩按顺时针站成一圈,每次会有一个小孩出队(第一个出队的小孩已知),在他出队时会指定下一个出队的小孩,直到所有的小孩全部出队游戏结束.第p个出队的小孩会得到f(p)个糖果,f(p)为p的 ...

  5. POJ2886 Who Gets the Most Candies? 线段树 反素数

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

  6. 【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 ...

  7. poj2886线段树(单点修改,区间查询)

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

  8. poj2886 Who Gets the Most Candies?

    思路: 先打反素数表,即可确定因子最多的那个数.然后模拟踢人的过程确定对应的人名.模拟的过程使用线段树优化加速. 实现: #include <cstdio> #include <cs ...

  9. poj分类 很好很有层次感。

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

随机推荐

  1. spring 3.1.4 升 4.0.2

          来自为知笔记(Wiz)

  2. CentOS&nbsp;6.4&nbsp;图文安装教…

    点评:CentOS 6.4是最新的出的系统,这里分享下安装教程,有些设置大部分教程没出现过,特分享下,方便需要的朋友 CentOS 6.4 下载地址: http://www.jb51.net/soft ...

  3. CSS画三角形引发的一些思考

      今天刷知乎时看到了一个问题,有谁能详细讲一下css如何画出一个三角形?怎么想都想不懂? - 知乎.很巧,刚入前端坑的我前不久也遇到过这个问题,今天再来谈一谈这个问题则是因为知乎的一些答案引发了我的 ...

  4. WisDom.Net 框架设计(五) 权限设计

    WisDom.Net --权限设计 1.需求分析     基本在所有的管理系统中都离不开权限管理.可以这么说,权限管理是管理系统的核心所在. 权限管理说白一些就是每个人能够做什么,不能够做什么.可以说 ...

  5. 如何写robots.txt?

    robin 发表在 八月 2, 2006 在国内,网站管理者似乎对robots.txt并没有引起多大重视,应一些朋友之请求,今天想通过这篇文章来简单谈一下robots.txt的写作. robots.t ...

  6. html 中设置span的width完美解决方法

    在默认情况下,由于span是行标签,设置width是无效的.只有改变display的属性,才可以实现设置宽度. 1.初步想法 span{ background-color:#ccc; display: ...

  7. javascript之事件详解2

    1.事件对象: 在触发DOM事件的时候都会产生一个对象. 2.事件对象event: (1).type:获取事件类型 (2).target:获取事件目标 (3).stopPropagation():阻止 ...

  8. 总结javascript继承的两种方式的N中写法

    最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式. 一.prototype方式 当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个p ...

  9. angularjs应用骨架(4)

    继续上一篇 继续了解angular其他内容. 与服务器交互 真正的应用需要和真实的服务器进行交互移动应用和新兴的Chrome桌面应用可能是例外.但是对于此外的所有应用来说,无论是想把数据持久化到云端还 ...

  10. js 删除数组方法

    今天遇到一个比较脑残的问题 ,在在用js删除数组的时候 delete 数组[下标]的方法删除数组时,该数组的下标变为null,但是数组的长度并没有发生相应的变化 转而使用splice(小标,第N个)删 ...