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 ...
随机推荐
- 使用IntelliJ IDEA开发SpringMVC网站
连接:https://my.oschina.net/gaussik/blog/385697
- Java model 对象处理
public class BaseFlowBo { /** * 流量 */ private String flow; /** * Pv */ private String pv; /** * CTR ...
- Dump 文件生成与分析
近期两天因为项目的须要,研究了一下Dump文件相关的知识,今天做一个小节(因为研究不久而且第一次写blog,希望网友们看到不要见笑). Dump文件是进程的内存镜像.能够把程序的运行状态通过调试器保存 ...
- Need a code of lazy load for div--reference
1. For all DIVs of a page $(function() { $("div").lazyload({effect: 'fadeIn'});}); 2. For ...
- iOS 开发-单元测试
前言 维基百科对单元测试的定义如下: 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可 ...
- FineUI初学手册-部分JS整理
有人老找JS,我吧FineUI自己写的JS沾过来方便大家看看,在实现前端的时候更灵活 JS 实例 注释 控件 F.ready F.ready(function(){}); 就是ready 很多方法 ...
- Linq101-CustomSequence
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class CustomS ...
- Excel.Application手册
----转载:http://blog.csdn.net/xxfigo/article/details/6618129 定制模块行为(1) Option Explicit '强制对模块内所有变量进行声明 ...
- xmlns:android="http://schemas.android.com/apk/res/android" 是什么意思?
声明xml命名空间.xmlns意思为“xml namespace”.冒号后面是给这个引用起的别名.schemas是xml文档的两种约束文件其中的一种,规定了xml中有哪些元素(标签).元素有哪些属性及 ...
- c - 折半查找(二分法检索)
#include <stdio.h> #define LEN 10 /* 折半查找(二分法检索). */ int index_of(int *a, int k) { ; ; int m; ...