POJ 2886 Who Gets the Most Candies? 线段树。。还有方向感
这道题不仅仅是在考察线段树,还他妹的在考察一个人的方向感。。。。
和线段树有关的那几个函数写了一遍就对了,连改都没改,一直在转圈的问题的出错。。。。
题意:从第K个同学开始,若K的数字为正 则往右转,否则往左转,转到的那同学出圈,知道剩下最后一个人。
输出得到蛋糕最多的人的名字和块数。
线段树的节点中存的是这一段内还有几个人没有跳出,思路很简单,详见注释。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <algorithm> using namespace std; int ncd[500010]; struct N
{
int c;
char n[11];
}pla[500010]; struct T
{
int l,r,sur;
}st[2000010]; void init(int l,int r,int site)//初始化线段树
{
st[site].l = l;
st[site].r = r;
st[site].sur = r-l+1;//开始时没有人跳出
if(l == r)
return ;
int mid = (l+r)>>1; init(l,mid,site<<1);
init(mid+1,r,site<<1|1);
} int F,Max; int updata(int m,int site,int R)
{
if(st[site].l == st[site].r)//此时已经找到了具体的人
{
st[site].sur--;//此段中有一人跳出 if(Max < ncd[R]) //比较得到蛋糕书的多少
{
F = st[site].l;
Max = ncd[R];
}
return pla[st[site].l].c;//返回卡片上的值
} int ln = site<<1,rn = site<<1|1;
//如果前半的段的人数 >= m 说明要找的人就在前半段
//反之 就在后半段
st[site].sur--;//此段中有一人跳出 if(m <= st[ln].sur)
{
updata(m,ln,R);
}
else
{
updata(m-st[ln].sur,rn,R);
}
} int main()
{
int i,j,k,n = sqrt(500000),m = 500000;
int tempr;
int tempc; for(i = 1;i <= n; ++i)
{
for(j = i;j <= m; ++j)
{
k = i*j;
if(k <= 500000)
{
if(i == j)
ncd[k]++;
else
ncd[k] += 2;
}
else break;
}
} while(scanf("%d %d",&n,&k) != EOF)
{
for(i = 1;i <= n; ++i)
{
scanf("%*c%s%d",pla[i].n,&pla[i].c);
} init(1,n,1); tempr = k; //tempr为第i个要被删除的人在删除i-1个人之后的位置
//tempc为第i个的人的卡片上的值 F = k;
Max = 1;
for(i = 1;; ++i)
{
tempc = updata(tempr,1,i);
if(i == n)
break; m = n-i;//m为剩下的人数 //下面讨论下一个要跳出的是谁。。。。错了N次。。。。
if(tempc > 0)//往右转
{
tempc %= m;
if(tempc == 0)//取余为零说明 tempc 为 m 的 倍数
tempc = m;
if(tempc <= m-tempr+1)//m-tempr+1 为tempr之后的人数
{
tempr += tempc - 1;
}
else
{
tempr = tempc - m+tempr-1;
}
}
else//往左转
{
tempc = - tempc;
tempc %= m;
if(tempc == 0)
tempc = m;
if(tempc <= tempr-1)
{
tempr = tempr-tempc;
}
else
{
tempr += m-tempc;
}
}
}
printf("%s %d\n",pla[F].n,Max);
}
return 0;
}
POJ 2886 Who Gets the Most Candies? 线段树。。还有方向感的更多相关文章
- POJ 2886.Who Gets the Most Candies? -线段树(单点更新、类约瑟夫问题)
线段树可真有意思呢续集2... 区间成段的替换和增减,以及区间求和等,其中夹杂着一些神奇的操作,数据离散化,简单hash,区间异或,还需要带着脑子来写题. 有的题目对数据的操作并不是直接按照题面意思进 ...
- POJ 2886 Who Gets the Most Candies?(线段树·约瑟夫环)
题意 n个人顺时针围成一圈玩约瑟夫游戏 每一个人手上有一个数val[i] 開始第k个人出队 若val[k] < 0 下一个出队的为在剩余的人中向右数 -val[k]个人 val[k ...
- POJ 2886 Who Gets the Most Candies? 线段树
题目: http://poj.org/problem?id=2886 左右转的果断晕,题目不难,关键是准确的转啊转.因为题目要求输出约数个数最多的数,所以预处理[1,500000]的约数的个数就行了. ...
- poj 2886 "Who Gets The Most Candies?"(树状数组)
传送门 参考资料: [1]:http://www.hankcs.com/program/algorithm/poj-2886-who-gets-the-most-candies.html 题意: 抢糖 ...
- 线段树(单点更新) POJ 2886 Who Gets the Most Candies?
题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...
- POJ 2828 Buy Tickets(排队问题,线段树应用)
POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意: 排队买票时候插队. 给出一些数对,分别代表某个人的想要插入的位 ...
- POJ 2886 Who Gets the Most Candies? (线段树)
[题目链接] http://poj.org/problem?id=2886 [题目大意] 一些人站成一个圈,每个人手上都有一个数字, 指定从一个人开始淘汰,每次一个人淘汰时,将手心里写着的数字x展示 ...
- (中等) POJ 2886 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 ...
- POJ 2886 Who Gets the Most Candies?(反素数+线段树)
点我看题目 题意 :n个小盆友从1到n编号按顺时针编号,然后从第k个开始出圈,他出去之后如果他手里的牌是x,如果x是正数,那下一个出圈的左手第x个,如果x是负数,那出圈的是右手第-x个,游戏中第p个离 ...
随机推荐
- java设计模式---享元模式
享元模式 顾名思义:共享元对象.如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用创建新的对象. 享元模式是为数不多的.只为提升系统性能而生的设计模式.它的主要作用就 ...
- 线段树---HDU1394Minimum Inversion Number
此题和上题略有不同,但是大体差不多,不过要把题意转换过来,题目大体意思为, 输入n, 也就是n个数,这些数为0 - (n-1), 这些数刚开始给定输入的顺序, 然后求他的逆序数,然后接着把第一个移到这 ...
- Fragment 创建 传递参数 跳转 典例
抽取的控制Fragment的父Activity /** * 抽象一个Activity托管我们的Single Fragment */ public abstract class SingleFrag ...
- C#中的序列化与反序列化
眼看XX鸟的课程关于C#的知识点就要学完了,翻看网络中流传的教程还是发现了一个课程中没有讲到的知识点:序列化与反序列化 无奈还是了解一下并操作一番,以备后用吧 介绍:就是将对象信息转化为二进制信息以便 ...
- 在Github上面搭建Hexo博客(一):部署到Github
什么是Hexo Hexo是一个基于Node.js的静态博客程序,可以方便的生成静态网页托管在Github和Heroku上.并且有很多人为其制作了很多优秀的主题(theme),你可以根据自己的喜好进行设 ...
- 织梦DEDECMS {dede:field name='position'/}标签增加其它属性的
在默认情况下,织梦(DedeCms)系统当前位置的调用标签为: {dede:field name='position'/} 在这种默认的情况下,生成后的代码大致为如下格式: 主页 > 应用软件 ...
- maven第四章背景案例
4.3简要设计 4.3.1接口设计 4.3.2模块结构 思想 先定义出核心接口,一个接口可以认为是一个功能,根据接口划分功能 设计模式就是一种思想,外观模式和代理模式,适配者模式三者的区别 http: ...
- [php基础]PHP.INI配置:Session配置详细说明教程
网上有很多PHP.INI文件配置的中文说明,但是对于PHP初学者来说在进行PHP运行环境搭建配置时还是容易一头雾水,今天换一种角度来分享如何进行php.ini配置,以求达到解决实际问题的效果,开篇以P ...
- Lesson 6: Exploring the World of Typefaces
Lesson 6: Exploring the World of Typefaces 这课提到的字体都是 英文 的. Article 1: More Google Web Fonts That Don ...
- 13 hbase连接
Configuration conf=new Configuration(); String zookeeper=""; String clientport="; Str ...