[JZOJ4566]reimu hakurei
题目大意
有数列 ai a_i,共有 n n个数。你要给aia_i填上数,每个位置要么是 bi b_i要么是 0 0。
又有ff和 g g,其中
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约数个数,那么
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相关推荐
- reimu hakurei
题目名意义 博丽灵梦 本弱表示从来自机都选的是博丽灵梦QAQ (当然像红魔乡附加关那种就只能选雾雨魔理沙了 题目描述 构造 首先很显然 f[i]=∑j|ib[j]∗d(ij) f[i]=\sum_{j ...
- NOJ [1120] Reimu\'s Teleport
问题描述 Hakurei Reimu(はくれい·れいむ) has an ability - Teleport. She can transport herself from here to anywh ...
- NBUT 1120 Reimu's Teleport (线段树)
题意: 有n个格子,一开始全部面向top.接下来的每次修改F a b ,如果 a>b则将a~b之间的格子全面置为向右,否则置为向左.对于每个询问Q输出向左.top.右的数量. 思路: 普通线段树 ...
- 2018ACM-ICPC徐州赛区网络赛: A. Hard to prepare(递推)
2018ACM-ICPC徐州赛区网络赛: A. Hard to prepare(递推) After Incident, a feast is usually held in Hakurei Shrin ...
- 28 问题分解(递归)
ACM-ICPC 2018 徐州赛区网络预赛 题目列表 排名:- 问答 A. Hard to prepare After Incident, a feast is usually held in Ha ...
- ACM-ICPC 2018 徐州赛区网络预赛 - A. Hard to prepare - (计数递归)
题目链接 After Incident, a feast is usually held in Hakurei Shrine. This time Reimu asked Kokoro to deli ...
- 学习OpenCV-(1)-安装与初探
文章目录 学习OpenCV-(1)-安装与初探 1.概述 下载和安装 OpenCV所拥有的模块 2.初探 1.显示图片 2.显示视频 3.简单的变换 4.不那么简单的变换 5.从摄像头中读取 6.写入 ...
- [2018 徐州 网络赛|Hard to prepare ] 环形染色问题的公式解法
题目来源 After Incident, a feast is usually held in Hakurei Shrine. This time Reimu asked Kokoro to deli ...
- Homestead 集成开发环境配置
来源:http://blog.csdn.net/markely/article/details/49585887 Laravel的目的就是让开发者的开发体验更愉快,开发过程更加简单.在环境搭建上也是如 ...
最新文章
- Linux下su与su -命令的区别
- 10年内,这19个关键技术将改变世界!
- HDU 1557 权利指数 国家压缩 暴力
- docker实战——构建Jekyll
- linux 安装 hadoop
- pandas object转float_25个Pandas实用技巧
- gcc编译器java_「gcc编译器下载」gcc编译器下载各版本下载 - seo实验室
- 华为鸿蒙用户体验计划怎样关闭,华为用户要注意,手机关闭这3个“默认选项”,还能流畅再用2年...
- [转载]堆排序(HeapSort) Java实现
- Visual Studio 2019 16.6 Preview 2 发布
- encoder.cpp(340) [feature_index.open(templfile, trainfile)]feature_index.cpp(174) [max_size == size]
- 我用Python写了一个邮箱脚本发给班花,没想到事情闹大了...
- .Net中的AOP系列之《单元测试切面》
- java实现贪吃蛇小游戏(源码+注释)
- 震旦adc225打印机连接计算机,震旦ADC225打印机驱动
- window 搜索占用进程 资源监视器
- charles安装免费版
- Redis中SDS简单动态字符串
- 【归档】Kata Containers 2.0 介绍
- Curator实现分布式锁的基本原理