博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树(单点更新) POJ 2886 Who Gets the Most Candies?
阅读量:5281 次
发布时间:2019-06-14

本文共 2108 字,大约阅读时间需要 7 分钟。

 

1 #include 
2 #include
3 #define lson l, m, rt << 1 4 #define rson m+1, r, rt << 1 | 1 5 6 const int MAX_N = 500000 + 10; 7 int sum[MAX_N << 2]; 8 struct node 9 {10 char name[15];11 int val;12 }boy[MAX_N<<2];13 int ans[MAX_N];14 int id;15 int n, k;16 17 void build(int l, int r, int rt)18 {19 sum[rt] = r - l + 1;20 if (l == r)21 return ;22 int m = (l + r) >> 1;23 build (lson);24 build (rson);25 }26 27 int update(int p, int l, int r, int rt)28 {29 sum[rt]--;30 if (l == r)31 {32 return l;33 }34 int m = (l + r) >> 1;35 if (p <= sum[rt<<1])36 {37 return update (p, lson);38 }39 else40 { 41 return update (p - sum[rt<<1], rson);42 }43 }44 45 void Solve(){ //计算ans46 memset(ans,0,sizeof(ans));47 for(int i=1;i<=n;i++){48 ans[i]++;49 for(int j=2*i;j<=n;j+=i)50 ans[j]++;51 }52 int max=ans[1];53 id=1;54 for(int i=2;i<=n;i++) //找出第几个人跳出获得的糖最多55 if(ans[i]>max){56 max=ans[i];57 id=i;58 }59 }60 61 int main(void) //POJ 2886 Who Gets the Most Candies?62 {63 //freopen ("inF.txt", "r", stdin);64 65 while (~scanf ("%d%d", &n, &k))66 {67 build (1, n, 1);68 for (int i=1; i<=n; ++i)69 {70 scanf ("%s%d", &boy[i].name, &boy[i].val);71 //printf ("%s%d\n", boy[i].name, boy[i].val);72 }73 Solve();74 //int maxn = f(n);75 int mod = sum[1];76 boy[0].val = 0;77 int pos = 0;78 //printf ("%d\n", id);79 int m=id;80 while (m--)81 {82 if (boy[pos].val > 0)83 k=((k-1+boy[pos].val-1)%mod+mod)%mod+1;84 else85 k=((k-1+boy[pos].val)%mod+mod)%mod+1;86 pos = update (k, 1, n, 1);87 //printf ("%d ", pos);88 mod = sum[1];89 }90 printf ("%s %d\n", boy[pos].name, ans[id]);91 }92 }

 

转载于:https://www.cnblogs.com/Running-Time/p/4506565.html

你可能感兴趣的文章
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
根据xml生成相应的对象类
查看>>
Android StageFrightMediaScanner源码解析
查看>>
springBoot 项目 jar/war打包 并运行
查看>>
HDU 1501 Zipper
查看>>
打包java程序生成exe
查看>>