poj 2886Who Gets the Most Candies?
http://poj.org/problem?id=2886
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 500100
using namespace std; typedef long long ll;
const int prime[]= {,,,,,,,,,,,,,,,};
int n,k;
struct node
{
int l,r,num;
} tree[maxn*]; ll maxsum,bestnum;
char name[maxn][];
int a[maxn]; void getantiprime(ll num, ll k,ll sum,int limit)
{
//num:当前枚举到的数,k:枚举到的第k大的质因子;sum:该数的约数个数;limit:质因子个数上限;
int i;
ll temp;
if(sum > maxsum)
{
maxsum = sum;
bestnum = num; //如果约数个数更多,将最优解更新为当前数;
}
if(sum==maxsum && bestnum > num)
bestnum = num; //如果约数个数相同,将最优解更新为较小的数;
if(k > )
return;
temp = num;
for(i=; i<=limit; i++) //开始枚举每个质因子的个数;
{
if(temp*prime[k] > n)
break;
temp = temp * prime[k]; //累乘到当前数;
getantiprime(temp, k+, sum*(i+), i); //继续下一步搜索;
}
} void build(int i,int l,int r)//建树
{
tree[i].num=r-l+;
tree[i].l=l;
tree[i].r=r;
if(l<r)
{
int mid=(l+r)/;
build(i+i,l,mid);
build(i+i+,mid+,r);
}
} int search1(int num,int i)//查找原始序号
{
tree[i].num--;
if(tree[i].l==tree[i].r)
{
return tree[i].l;
}
if(num<=tree[i+i].num)
return search1(num,i+i);
return search1(num-tree[i+i].num,i+i+);
} int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
getantiprime(,,,);//找到n以内反素数最大的;
build(,,n);
for(int i=; i<=n; i++)
{
scanf("%s %d",name[i],&a[i]);
}
int id;
for(int i=; i<bestnum; i++)//约瑟夫原理
{
n--;
id=search1(k,);
if(n==) break;
if(a[id]>)
k=(k-+a[id]-)%n+;
else
k=((k-+a[id])%n+n)%n+;
}
printf("%s %lld\n",name[id],maxsum);
}
return ;
}
poj 2886Who Gets the Most Candies?的更多相关文章
- POJ 2886Who Gets the Most Candies?(线段树)
POJ 2886 题目大意是说有n个人围成一圈,游戏的起点是k,每个人持有一个数字(非编号)num,每次当前的人退出圈,下一个人是他左边的第num个(也就是说下一个退出的是k+num, k可以为负数, ...
- POJ3159 Candies —— 差分约束 spfa
题目链接:http://poj.org/problem?id=3159 Candies Time Limit: 1500MS Memory Limit: 131072K Total Submiss ...
- POJ 3159 Candies(差分约束,最短路)
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 20067 Accepted: 5293 Descrip ...
- (poj)3159 Candies
题目链接:http://poj.org/problem?id=3159 Description During the kindergarten days, flymouse was the monit ...
- POJ 3159 Candies (图论,差分约束系统,最短路)
POJ 3159 Candies (图论,差分约束系统,最短路) Description During the kindergarten days, flymouse was the monitor ...
- 线段树(单点更新) POJ 2886 Who Gets the Most Candies?
题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...
- POJ——T 3159 Candies
http://poj.org/problem?id=3159 Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 33328 ...
- 图论--差分约束--POJ 3159 Candies
Language:Default Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 43021 Accep ...
- poj 3159 Candies 差分约束
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 22177 Accepted: 5936 Descrip ...
随机推荐
- Drawer_layout 关闭滑动视图
在android抽屉Drawer_layout开发中,我需要关闭滑动的试图 找到了这个方法 mDrawer_layout.setDrawerLockMode(DrawerLayout.LOCK_MOD ...
- [转]【基于zxing的编解码实战】精简Barcode Scanner篇
通过<[搞定条形码]zxing项目源码解读(2.3.0版本,Android部分)>的分析,现在可以实现最终目标了:精简Barcode Scanner并将其中的编码和解码分离为两个独立的部分 ...
- C/C++笔试题整理
1. C的结构体和C++结构体的区别 (1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数.所以C的结构体是没有构造函数.析构函数.和this指针的. (2)C的结构体对 ...
- chmod -x chmod的N种解法
声明:该文章摘自陈皓的酷壳. 问题: 如果某天你的Unix/Linux系统上的chomd命令被某人去掉了x属性(执行属性),那么,你如何恢复呢? 参考答案: 1)重新安装.对于Debian的系统: s ...
- 将JSON数组显示前台Table中
将JSON数组显示前台Table中 在最近的学习中遇到一个小问题,如何把JSON数组显示在前台的table中,经过一番借鉴和学习之后终于解决了这个问题.具体的代码如下: (前提:利用ajax获取过来的 ...
- servlet 配置到服务器
最近写了个安卓项目,服务端用的servlet.因为第一次写java项目,写完如何发布不是太清除,于是把这回经理写出来,一来做个记录,二来也给和我同样经历的朋友一点启示. 首先配置你的java主机和你的 ...
- mvc存储Cookie和读取Cookie方法
mvc存储Cookie和读取Cookie方法: //存储 HttpCookie cookie = new HttpCookie("User"); System.Text.Encod ...
- JavaScript--动态更改CSS样式
JavaScript太强大了,虽然是弱语言,不过一点都不输于Java 可以自行设置随机数,来动态更改CSS样式,每一次都是不一样的感觉,这个小功能挺实用的 <!DOCTYPE html> ...
- asp.net中过滤器的两种写法
1.写在一个单独的类库中在web.config中进行配置 <httpModules> <add name="" type="类的全名称,程序集的名称&q ...
- c-连接两个链表
概述 还是相对简单,不过要记得释放不用的头结点即可. 代码为: //将lList2头结点连接在lList1尾结点的后面. void combine(linklist lList1, linklist ...