HDU 5358 多校第6场 First One
First One
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 672 Accepted Submission(s): 193
Let S(i,j) be
the sum of ai,ai+1,…,aj.
Now soda wants to know the value below:
Note: In this problem, you can consider log20 as
0.
indicating the number of test cases. For each test case:
The first line contains an integer n (1≤n≤105),
the number of integers in the array.
The next line contains n integers a1,a2,…,an (0≤ai≤105).
1
2
1 1
12
首先题意不是啥问题,就是给你个数组,让你求那个式子,s表示i到j的和。
比赛的时候想了个带二分的,就是统计log2可能出现的可能,一共同拥有34种,然后求一个前缀和,前缀和是递增的,能够二分。就写了
复杂度没算好,以为33*n*log(n)能过。结果跪了一下午,昨天就这么愉快的跪了
赛后题解上说用俩指针扫一遍,不得不吐槽一下。MD题解都是英文的。
联想到一次bestcoder 有一个题是求一共序列中两个数的和模上一个数最大,我以前的做法就是排序二分。而正解就是俩指针扫一遍,然而我没有记住
这个题就卡这个log(n)然而我就是过不去,诶。还是思维被限制住了
今天上午搞了个33 * n的
思路:
把数组处理成 前缀和,把log分类,有35种情况,题中吧log(0) 规为0。须要特判,题中给的最大的sum值为10^10,所以有35种情况,
那么就分情况讨论,一层循环。里面就是枚举n。然后找到两个值一个是sum[i-1] + 2^j的位置。另一个是sum[i-1]+2^(j+1)的位置,这段区间内的log值就全为j,用等差数列求和公式就能瞬间算出来这段区间的值,并且仅仅须要两个标记扫一遍。为何能够仅仅扫一遍呢,sum数组的值是递增的。须要找的值也是递增的。所下面次找的时候仅仅须要在上次寻找的后面继续接上就OK
/****************************************
** 2015 Multi-University Training Contest 6
** 1006 First One
** HDU 5358
** by calamity_coming
**************************************/ #include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int MAX_LONG = 1E5;
ll a[MAX_LONG + 10];
ll sum[MAX_LONG + 10];
ll cf2[40]; void init()
{
ll k = 1;
for(int i=0; i<=34; ++i)
{
cf2[i] = (k<<(i));
}
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
sum[0] = 0;
for(int i=1; i<=n; ++i)
{
scanf("%I64d",&a[i]);
sum[i] = sum[i-1] + a[i];//前缀和处理
}
sum[n+1] = 1E17;
ll ans = 0; //0
for(int i=1; i<=n; ++i)//0比較特殊。要特殊的干
{
int p = i;
while(sum[p]==sum[i-1] && p<=n+1)
{
++p;
}
--p;
if(p>=i)
{
ans += (ll)(i*3+p)*(ll)(p-i+1)/2;
}
} for(int j=0; j<=33; ++j)//这是每一个情况
{
int p1 = 0,p2 = 0;//用两个指针扫一遍
for(int i=1; i<=n; ++i)//当i递增时,新的p1,p2一定在后面
{
ll adc = sum[i-1] + cf2[j];
while(sum[p1]<adc && p1<=n)
{
++p1;
}
adc = sum[i-1] +cf2[j+1];
while(sum[p2]<adc && p2<=n+1)
{
++p2;
}
--p2;
if(p2>=p1 && p2)
{
ans += (j+1)*(ll)(i*2+p1+p2)*(ll)(p2-p1+1)/2;
}
}
}
printf("%I64d\n",ans);
}
return 0;
}
HDU 5358 多校第6场 First One的更多相关文章
- HDU 4635 多校第四场 1004 强联通
我还有什么好说,还有什么好说...... 我是SBSBSBSBSBSBSBSBSBSBSBSBBSBSBSBSBSBSBSBSBS........................ 题意 思路什么的都不 ...
- HDU 4622 多校第三场1002 后缀自动机
比赛的时候我是用后缀数组的,但是T了. 赛后看了解题报告说,后缀数组貌似是卡你常数的时间,我算了下复杂度O(T * Q * n).这是10 ^ 8,但是考虑到每次询问的时候都要重新构造字符,所以那个n ...
- HDU 4628 多校第三场1008 dp
这题就没什么好说的了.直接枚举2 ^ 16 的状态,用1表示拿这位,0表示不拿,每次判断是否可以这么拿. #include <iostream> #include <cstdio&g ...
- HDU暑假多校第八场G-Card Game
一.题意 给出N个卡牌,卡牌的正反两面具有两个数字,取值范围为[1,2*n],给出若干个默认正面向上的卡牌,求最小反转多少张卡牌可以使得,每张卡牌朝上的面上都有一个不同的数字,同时满足最小反转次数的反 ...
- HDU暑假多校第八场J-Taotao Picks Apples
一.题意 给定一个序列,之后给出若干个修改,修改的内容为在原序列的基础上,将某一位元素的值改成给定的值<每次修改相互独立,不保存修改后的结果>.之后询问,在选择第一位元素的情况下,最长递增 ...
- HDU暑假多校第六场K-werewolf
一.题意 好人必然说真话,坏人不一定说真话,给定N个人的言论<每人一个发言.不谈及自己>,要求指出有多少个人一定是好人,有多少个人一定是坏人.#define 狼人 坏人#define 村民 ...
- HDU暑假多校第三场H.Monster Hunter
一.题意 给定一个树状地图,每个树节点上有一只怪物,打死一只怪物的过程中将会消耗A点HP,打死之后将会获得B点HP.因为树状结构,所以每只怪物必须先打死父节点的怪兽之后在打死子节点的怪物.现在,给定每 ...
- HDU暑假多校第四场J-Let Sudoku Rotate
一.题意 Sudoku is a logic-based, combinatorial number-placement puzzle, which is popular around the wor ...
- HDU 全国多校第四场 题解
题解 A AND Minimum Spanning Tree 参考代码: #include<bits/stdc++.h> #define maxl 200010 using namespa ...
随机推荐
- Laravel5.1学习笔记22 Eloquent 调整修改
Eloquent: Mutators Introduction Accessors & Mutators Date Mutators Attribute Casting Introductio ...
- FCC 基础JavaScript 练习6
1.对象和数组很相似,数组是通过索引来访问和修改数据,对象是通过属性来访问和修改数据的, 对象适合用来存储结构化数据,就和真实世界的对象一模一样,比如一只猫. 任务 创建一个叫做myDog的对象,它里 ...
- ubuntu下查看服务器的CPU详细情况
https://www.cnblogs.com/liuq/p/5623565.html 全面了解 Linux 服务器 - 1. 查看 Linux 服务器的 CPU 详细情况 ubuntu下查看服务器的 ...
- 安装好Pycharm后如何配置Python解释器简易教程
呃呃,遇到坑了...... 安装完Python,没有去配置好Python解释器,直接打开Python项目包,去运行程序,程序输出结果只是显示 Process finished with exit co ...
- nginx_location用法总结
location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配 ...
- 【原】SMTP发送邮件
1.下载class.phpmailer.php和class.smtp.php至公共库 2.编写发邮件的公共函数 function sendMail($param) { $config = C('THI ...
- 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误" One of the configured ...
- XGBoost参数中文翻译以及参数调优
XGBoost:参数解释:https://blog.csdn.net/zc02051126/article/details/46711047 机器学习系列(11)_Python中Gradient Bo ...
- DBDA
<?php class DBDA{ public $host = "localhost"; //服务器地址 public $uid = "root"; / ...
- 我的ACM技能框架(自用)
每次接触到新的知识就把它名字记下来,留给以后当纪念 2018.11 已经学会的 滚动数组,前缀和优化 对多维数组在空间复杂度上的降维优化 最长上升子序列 LIS问题,动态规划递推解决 最长不下 ...