题目大意

有数列 ai a_i,共有 n n个数。你要给aia_i填上数,每个位置要么是 bi b_i要么是 0 0。
又有ff和 g g,其中

fi=∑j|igjgi=∑j|iai

f_i=\sum_{j|i}g_j\\ g_i=\sum_{j|i}a_i
每个位置 i i能获得收益viv_i当且仅当 fi≠ri f_i\not=r_i,请最大化收益,并输出方案。

1≤n≤2×105,ri∈[0,263),bi,vi∈(0,104) 1\le n\le2\times10^5,r_i\in[0,2^{63}),b_i,v_i\in(0,10^4)


题目分析

不要被题意弄蒙蔽了,令 d(i) d(i)表示 i i约数个数,那么

fi=∑j|iai×d(ij)

f_i=\sum_{j|i}a_i\times d({i\over j})
d d数组可以使用类EratostheneEratosthene筛法在 O(nln n) \mathrm O(nln\ n)的时间解决。
显然前面的数只会对后面的数做贡献。因此我们从小到大填数,如果当前该位的 fi f_i等于 ri r_i,那我们就让这位填 bi b_i就可以满足条件了,否则不填即可。还是使用类 Eratosthene Eratosthene筛法更新后面的位置的 fi f_i。
由于 bi∈N+ b_i\in \Bbb {N^+},因此答案一定能将贡献拿满。
时间复杂度 O(nln n) \mathrm O(nln\ n)。

是不是被秀了一脸。


代码实现

#include <iostream>
#include <cstdio>using namespace std;typedef long long LL;int read()
{int x=0,f=1;char ch=getchar();while (!isdigit(ch)) f=ch=='-'?-1:f,ch=getchar();while (isdigit(ch)) x=x*10+ch-'0',ch=getchar();return x*f;
}const int N=200500;int b[N],d[N];
LL r[N],now[N];
bool s[N];
LL ans;
int n;void pre()
{for (int i=1;i<=n;i++)for (int j=i;j<=n;j+=i)d[j]++;
}void solve()
{for (int i=1;i<=n;i++)if (r[i]==now[i]){now[i]+=b[i],s[i]=true;for (int j=i;j<=n;j+=i)now[j]+=1ll*b[i]*d[j/i];}
}int main()
{freopen("reimu.in","r",stdin),freopen("reimu.out","w",stdout);n=read();for (int i=1;i<=n;i++) b[i]=read();for (int i=1;i<=n;i++) r[i]=read();for (int i=1;i<=n;i++) ans+=read();pre(),solve();printf("%d\n",ans);for (int i=1;i<n;i++) putchar('0'+s[i]),putchar(' ');printf("%d\n",s[n]);fclose(stdin),fclose(stdout);return 0;
}

[JZOJ4566]reimu hakurei相关推荐

  1. reimu hakurei

    题目名意义 博丽灵梦 本弱表示从来自机都选的是博丽灵梦QAQ (当然像红魔乡附加关那种就只能选雾雨魔理沙了 题目描述 构造 首先很显然 f[i]=∑j|ib[j]∗d(ij) f[i]=\sum_{j ...

  2. NOJ [1120] Reimu\'s Teleport

    问题描述 Hakurei Reimu(はくれい·れいむ) has an ability - Teleport. She can transport herself from here to anywh ...

  3. NBUT 1120 Reimu's Teleport (线段树)

    题意: 有n个格子,一开始全部面向top.接下来的每次修改F a b ,如果 a>b则将a~b之间的格子全面置为向右,否则置为向左.对于每个询问Q输出向左.top.右的数量. 思路: 普通线段树 ...

  4. 2018ACM-ICPC徐州赛区网络赛: A. Hard to prepare(递推)

    2018ACM-ICPC徐州赛区网络赛: A. Hard to prepare(递推) After Incident, a feast is usually held in Hakurei Shrin ...

  5. 28 问题分解(递归)

    ACM-ICPC 2018 徐州赛区网络预赛 题目列表 排名:- 问答 A. Hard to prepare After Incident, a feast is usually held in Ha ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 - A. Hard to prepare - (计数递归)

    题目链接 After Incident, a feast is usually held in Hakurei Shrine. This time Reimu asked Kokoro to deli ...

  7. 学习OpenCV-(1)-安装与初探

    文章目录 学习OpenCV-(1)-安装与初探 1.概述 下载和安装 OpenCV所拥有的模块 2.初探 1.显示图片 2.显示视频 3.简单的变换 4.不那么简单的变换 5.从摄像头中读取 6.写入 ...

  8. [2018 徐州 网络赛|Hard to prepare ] 环形染色问题的公式解法

    题目来源 After Incident, a feast is usually held in Hakurei Shrine. This time Reimu asked Kokoro to deli ...

  9. Homestead 集成开发环境配置

    来源:http://blog.csdn.net/markely/article/details/49585887 Laravel的目的就是让开发者的开发体验更愉快,开发过程更加简单.在环境搭建上也是如 ...

最新文章

  1. Linux下su与su -命令的区别
  2. 10年内,这19个关键技术将改变世界!
  3. HDU 1557 权利指数 国家压缩 暴力
  4. docker实战——构建Jekyll
  5. linux 安装 hadoop
  6. pandas object转float_25个Pandas实用技巧
  7. gcc编译器java_「gcc编译器下载」gcc编译器下载各版本下载 - seo实验室
  8. 华为鸿蒙用户体验计划怎样关闭,华为用户要注意,手机关闭这3个“默认选项”,还能流畅再用2年...
  9. [转载]堆排序(HeapSort) Java实现
  10. Visual Studio 2019 16.6 Preview 2 发布
  11. encoder.cpp(340) [feature_index.open(templfile, trainfile)]feature_index.cpp(174) [max_size == size]
  12. 我用Python写了一个邮箱脚本发给班花,没想到事情闹大了...
  13. .Net中的AOP系列之《单元测试切面》
  14. java实现贪吃蛇小游戏(源码+注释)
  15. 震旦adc225打印机连接计算机,震旦ADC225打印机驱动
  16. window 搜索占用进程 资源监视器
  17. charles安装免费版
  18. Redis中SDS简单动态字符串
  19. 【归档】Kata Containers 2.0 介绍
  20. Curator实现分布式锁的基本原理

热门文章

  1. BigDecimal.setScale()方法总结
  2. QPM 性能监控组件总篇
  3. 自定义View之--九宫格图形密码锁
  4. 内核裁剪和部分选项的意义
  5. 建造属于你的无人驾驶车——(三)Solidworks模型导出为URDF模型
  6. 智慧港口发展趋势技术创新助力港口自动化与智能化
  7. easybcd误删win10 启动项,系统无法启动恢复步骤
  8. 江恩周期图对角线数字与斐波那契对撞交集周期
  9. 星巴克连续第三年支持中国国际进口博览会
  10. android vlayout 刷新,vlayout使用说明(一)