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 ...
随机推荐
- Android 4.4(KitKat)中VSync信号的虚拟化
原文地址:http://blog.csdn.net/jinzhuojun/article/details/17293325 Android 4.1(Jelly Bean)引入了Vsync(Vertic ...
- 工程建立多个source folder
在工程中,想在建立多个source filder,总是报错,报错信息是 Cannot nest 'GzEdu/src/c' inside 'GzEdu/src'. To enable the nest ...
- Android Scroller类的详细分析
尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/7321910 Scroller这个类理解起来有一定的困难,刚开始接触Scrol ...
- 实战:sqlserver 数据实时同步到mysql
1.安装安装mysqlconnector 2.配置mysqlconnector ODBC数据管理器->系统DSN->加入->mysql ODBC 5.3 ANSI driver-&g ...
- 关于配置tnsnames来使用PLSQL连接数据库
关于配置tnsnames来使用PLSQL连接数据库 要想用ORACLE SQLdeveloper或者第三方工具PLSQLdeveloper.Toad等连接ORACLE数据库,必需要配置TNSnames ...
- oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段
今天在查数据的时候报错 ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace, b.segfile# ...
- Android更新UI的几种方式
之前做过一个Android采集心电图数据的程序,那才是真正的多线程,之前写的小程序:比如下载个文件,从socket接受大一点的数据流然后在ui上更新进度,我都感觉这就叫做多线程了,其实这啥都不算,用个 ...
- 2015 Multi-University Training Contest 5
#include <iostream> //1002 #include<set> #include<stdio.h> using namespace std; co ...
- gulp初涉
1.什么是gulp? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用它,不仅可以很 ...
- maven自动部署到tomcat的问题
最近需要使用Maven将项目自动部署到Tomcat,在网络上也查找了很多文章,内容大同小异,今天打算在这里给自己做一个小总结 参考网址:http://blog.csdn.net/dilaomimi/a ...