BestCoder Round #39
-------好久没更新博客了,发现还是需要不断总结才能进步,所以还是把最近打的一些比赛记录一下。
T1:Delete (hdu 5210)
题目大意:
给出n个数,然后要删掉k个,要求剩下的数中 不同的数个数最多。
题解:
贪心水题,尽可能先删出现次数多的。数据范围很小直接暴力就好。如果n更大的话可以用堆。
T2:Mutiple (hdu 5211)
题目大意:
给出一个长度为n(<=10000)的数列,数列中元素互不相同且都小于等于n。对于每个数Ai,求出它右边第一个满足Aj是Ai的倍数的j.
题解:
看到n的范围,我就感觉是n*sqrt(n)来做的。于是可以从右往左,用Ci表示当前满足Ak是i的倍数的最小的k.碰到一个数,求出他的所有约数,然后更新约数的C.对于Ai的答案,就是C[Ai].
看了官方题解,才发现可以nlogn来做。
从右向左查看序列
维护一个数组p[1..10000]表示该数上一次出现的位置
遇到一个数就暴力查看它的所有倍数,取最小值即可。
T3:Code (hdu 5212)
题目大意:
给出一个长度为n的数列A,求sigma( gcd(A[i],A[j])*(gcd(A[i],A[j])-1) ) mod 10007. n<=10000
题解:
这题比赛的时候没想出来,实在是太弱了..
官方题解看不懂,看了大神们的代码,和官方题解毛关系都没有。
思路是枚举gcd=x,然后看有多少对gcd=x计算总和。
f[i]表示gcd是i的倍数的有多少对,g[i]表示gcd=i的有多少对。
那么f[i]=(cnt[i]+cnt[i*2]+cnt[i*3]...)2,cnt[i]表示数列中i的个数。
g[i]=f[i]-g[i*2]-g[i*3]-g[i*4]...
求出了g[i],累加即可。
T4:Lucky (hdu 5213)
题目大意:
给出长度为n的数列A和一个数K,有m个询问,询问有多少对l1<=i<=r1,l2<=j<=r2满足Ai+Aj=K. n,m<=30000;
题解一:O(m*sqrt(n)*log(n))
主要思想是分块.f[x][y]表示i在第x个块中,1<=j<=y的答案,这个很容易预处理出来.那么可以O(1)得到i在第x个块中,
l<=j<=r的答案(f[x][r]-f[x][l-1])。
对于询问l1,r1,l2,r2. 利用f数组搞出l1,r1之间的块的答案,然后对于两端不完整的块在[l2,r2]中的线段树中暴力计算。
写个可持久化线段树就好啦。
然后我代码写的丑,被卡常数了...于是照着大神的代码打,把块的大小从sqrt(n)改成100,写个读入优化,把数组扣的小一点,就可以卡过去了。
题解二:O(m*sqrt(n))
复杂度好代码好写秒杀前面的方法.
把一个询问拆成4个询问.
Ans(l1,r1,l2,r2)=Ans(1,r1,1,r2)-Ans(1,l1-1,1,r2)-Ans(1,r1,1,l2-1)+Ans(1,l1-1,1,l2-1);
把Ans(1,L,1,R) 看成区间[L,R]的一个询问,就可以莫队了.
人太水,比赛的时候只A了前2题,Rating掉了.发现BC的题目还是挺不错的,以后会坚持做下去。
BestCoder Round #39的更多相关文章
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- 贪心 BestCoder Round #39 1001 Delete
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...
- [HDOJ 5212] [BestCoder Round#39] Code 【0.0】
题目链接:HDOJ - 5212 题目分析 首先的思路是,考虑每个数对最终答案的贡献. 那么我们就要求出:对于每个数,以它为 gcd 的数对有多少对. 显然,对于一个数 x ,以它为 gcd 的两个数 ...
- BestCoder Round #39 解题报告
现场只做出前三题w 不过不管怎样这既是第一次认真打BC 又是第一次体验用在线编译器调代码 订正最后一题花了今天一整个下午(呜呜 收获还是比较大的^_^ Delete wld有n个数(a1,a2,... ...
- hdu4932 Miaomiao's Geometry (BestCoder Round #4 枚举)
题目链接:pid=4932" style="color:rgb(202,0,0); text-decoration:none">http://acm.hdu.edu ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
- bestcoder Round #7 前三题题解
BestCoder Round #7 Start Time : 2014-08-31 19:00:00 End Time : 2014-08-31 21:00:00Contest Type : ...
- Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
随机推荐
- oracle表的操作简述
单表的操作!(代码完全可以用手工代替,写下来为了记忆)1.建立表create table HKB_TABLE_MODIFY( NAME VARCHAR2(6), AGE VARCHAR2(3), ...
- :input 匹配所有 input, textarea, select 和 button 元素
描述: 查找所有的input元素,下面这些元素都会被匹配到. HTML 代码: <form> <input type="button" value="I ...
- python-操作csv文件
import csv lv,er=[],[] #读 with open('date.csv') as mycsv: reader=csv.DictReader(mycsv) for row in re ...
- Linux C Programing - Arguments(2)
#include <iostream> #include <stdlib.h> #include <stdio.h> //printf #include <u ...
- miniUI datagrid 获取序号
获取每一个row以后,其中的row._index字段和页面上显示的序号虽然看起来一样, 但是实际上不是同一个东西,如果用客户端排序模式,排序后,row._index和页面显示的序号就对不上了. 正确的 ...
- wf(四)
我们已经在c#和xaml上编写了工作流,或者有的人会觉得在xaml上编写的workflow没什么优点,然而其实xaml其实具有一些很特别的优势. 1. xaml支持工作流设计器,c#不支持: 2. x ...
- ExtJs
ExtJS是一种主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架. 概念 1.ExtJS可以用来开发RIA也即富客户端的AJAX应用,是一个用javascript写的,主要用 ...
- php手册杂记
1, strcmp()是比较两个字符串的大小,两个字符串相同时返回0,第一个字符串大于第二个字符串时返回一个正值,否则返回负值.比较两个字符串的算法是:逐个比较两个串中对应的字符,字符大小按照ASCI ...
- HTML的基本认识
就目前学的HTML,感受最深的就是很多标签.HTML不怎么需要逻辑,只需记忆大量标签.不懂的可以参照W3C的文档.里面有很多学习的东西,很受用. 关于CSS基础: 基本选择器: 1.标签选择器 ...
- python成长之路【第三篇】:函数
1.函数基础 函数是python为了代码最大程度的重用和最小化代码冗余而提供的基本程序结构. 函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件. 函数用于将相关功能打包并参数. pyth ...