Aggregated Counting(找规律 + 预处理)
Aggregated Counting
转 : https://blog.csdn.net/cq_phqg/article/details/48417111
题解:
可以令n=1+2+2+3+3+......+ i 这个序列的长度为p
那么a[n]=1*1+2*2+3*2+...... + p*i
那么不难发现a[a[n]] = 1*1 + (2+3)*2 + (4+5)*3 + (6+7+8)*4 + ... + (pre+1 + pre+2 + ... + pre+b[p] ) * p
b[p]为p在原序列中出现的次数
pre,b[p]这些值都可以预处理算出 每次询问可以O(1)算出答案
pre 是 第p-1项的pre + b[p-1]
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; typedef long long ll;
const int MOD = (int)1e9+;
const int INF = (int)1e9;
const int MAXN = ;
int a[MAXN+];
int b[MAXN+];
int sum[MAXN+];
int dp[MAXN+];
int pre[MAXN+];
int sz,val; int add(int x,int y){
x+=y;
if(x>=MOD)x-=MOD;
return x;
} int po(int x,int n){
int ans=;
int temp=x;
while(n){
if(n&)ans=(ll)ans*temp%MOD;
temp=(ll)temp*temp%MOD;
n>>=;
}
return ans;
} int main()
{
val=po(,MOD-);
a[]=;
a[]=;
a[]=;
int sz=;
for(int i=;;i++){
int cnt=a[i];
while(cnt){
a[++sz]=i;
cnt--;
if(sz>=MAXN)break;
}
if(sz>=MAXN)break;
}
for(int i=;i<=MAXN;i++){
sum[i]=sum[i-]+a[i];
if(sum[i]>=INF)break;
} for(int i=;i<=MAXN;i++){
dp[i]=add(dp[i-],(ll)( add(add(add(pre[i-],),pre[i-]),a[i]) )*a[i]%MOD*i%MOD*val%MOD);
pre[i]=add(pre[i-],a[i]);
} int t;scanf("%d",&t);
while(t--){
int n;scanf("%d",&n);
int l=,r=MAXN;
int pos;
while(l<=r){
int mid=l+r>>;
if(n<=sum[mid]){
pos=mid;
r=mid-;
}
else l=mid+;
}
int x=n-sum[pos-];
int ans=add(dp[pos-],(ll)( add(add(add(pre[pos-],),pre[pos-]),x) )*x%MOD*pos%MOD*val%MOD);
printf("%d\n",ans);
}
return ;
}
Aggregated Counting(找规律 + 预处理)的更多相关文章
- Hdu 5439 Aggregated Counting (2015长春网络赛 ACM/ICPC Asia Regional Changchun Online 找规律)
题目链接: Hdu 5439 Aggregated Counting 题目描述: 刚开始给一个1,序列a是由a[i]个i组成,最后1就变成了1,2,2,3,3,4,4,4,5,5,5.......,最 ...
- hdu4952 Number Transformation (找规律)
2014多校 第八题 1008 2014 Multi-University Training Contest 8 4952 Number Transformation Number Transform ...
- hdu_5894_hannnnah_j’s Biological Test(打表找规律)
题目链接:hdu_5894_hannnnah_j’s Biological Test 题意: 有n个不同的位置围成一个圈,现在要安排m个人坐,每个人至少的间隔为k,问有多少种安排 题解: 先打表找规律 ...
- HDU 4349 Xiao Ming's Hope 找规律
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4349 Xiao Ming's Hope Time Limit: 2000/1000 MS (Java/ ...
- hdu 2604 Queuing dp找规律 然后矩阵快速幂。坑!!
http://acm.hdu.edu.cn/showproblem.php?pid=2604 这题居然O(9 * L)的dp过不了,TLE, 更重要的是找出规律后,O(n)递推也过不了,TLE,一定 ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
- A Simple Problem with Integers 循环节 修改 平方 找规律 线段树
A Simple Problem with Integers 这个题目首先要打表找规律,这个对2018取模最后都会进入一个循环节,这个循环节的打表要用到龟兔赛跑. 龟兔赛跑算法 floyed判环算法 ...
- 【poj 2478】Farey Sequence(数论--欧拉函数 找规律求前缀和)
题意:定义 Fn 序列表示一串 <1 的分数,分数为最简分数,且分母 ≤n .问该序列的个数.(2≤N≤10^6) 解法:先暴力找规律(代码见屏蔽处),发现 Fn 序列的个数就是 Φ(1)~Φ( ...
- hdu 3951 - Coin Game(找规律)
这道题是有规律的博弈题目,,, 所以我们只需要找出规律来就ok了 牛人用sg函数暴力找规律,菜鸟手工模拟以求规律...[牢骚] if(m>=2) { if(n<=m) {first第一口就 ...
随机推荐
- Matlab 快捷键 命令
1. 在命令窗口(Command Window)中: 1) [上.下键]――切换到之前.之后的命令,可以重复按多次来达到你想要的命令 2) clc――清除命令窗口显示的语句,此命令并不清空当前工作区的 ...
- 对称加密----AES和DES加密、解密
目前主流的加密方式有:(对称加密)AES.DES (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...
- CF865D Buy Low Sell High 贪心
正解:贪心 解题报告: 传送门! 这题首先有个很显然的dp,太基础了不说QAQ 然后考虑dp是n2的,显然过不去,所以换一个角度 然后发现这题和普通的dp的题有什么不同呢?就它这儿是一天只能买一支股, ...
- PHP 快速实现大文件上传
简单的上传代码 最简上传代码 <?php move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES[ ...
- 【SQL】where 后不可以接聚合函数,都哪些是聚合函数?
where 后不可以接聚合函数,比如函数:SUM(count),AVG(count),MIN(count),MAX(count)
- python-面向对象-13_文件
文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...
- sql server外网复制+非默认端口
注意查看服务器名称,这出来的是什么,就必须要在别名上写什么,如果不一样,请参照 :修改计算机名 SELECT @@SERVERNAME as InstalledName, SERVERPROPERTY ...
- 萌新接触前端的第三课——JavaScript
JavaScript概述 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase ...
- SQL 2016 AlwaysOn 无域AlwaysOn配置要点
环境准备: (1)操作系统:Windows Server 2016 Datacenter (2)SQL Server 2016 配置SQL 2016 AlwaysOn 要点 1,因为没有域所以需要在 ...
- javaScript刷新页面
刷新页面有一下几种: 1.直接在页面上: 每两秒刷新页面 <meta http-equiv="refresh" content="2"> 2.每秒刷 ...