BestCoder Round #11 题解集合
1001.Alice and Bob
签到题*1,只要x * 2 == n && y * 2 == m就满足条件。
var
m, n, x, y : int64; begin
while not eof do begin
readln(m, n, x, y);
if (m = * x) and (n = * y) then writeln('YES') else writeln('NO');
end;
end.
1002.Bob and math problem
我真是WA的不行,但是很明显我的算法没有问题啊。。。
(2014/9/28 22:36更新 原来是Pascal的eof做的死,早知道以后不再也用P了><)
我的算法:统计0到9的个数,然后找出最小的奇数放到末尾,接着从9到0输出,最后输出选出的那个奇数。
中间要判断输出-1的情况:没有奇数;找出一个奇数以后只剩下0了。
var
num : array[..] of longint;
n, ch, i, j, x : longint; function find : boolean;
var
i : longint;
flag : boolean; begin
flag := true;
for i := to do
if num[i] > then flag := false;
find := flag and (n <> );
end; begin
while not eof do begin
readln(n);
if n = then exit;//这句话没加我就会WA,不知道为啥子捏~
fillchar(num, sizeof(num), );
for i := to n do begin
read(x);
inc(num[x]);
end;
ch := ;
for i := to do begin
j := i * - ;
if num[j] > then begin
ch := j;
dec(num[j]);
break;
end;
end;
if (ch = ) or find then begin
writeln(-);
continue;
end;
for i := downto do
while num[i] > do begin
write(i);
dec(num[i]);
end;
writeln(ch);
end;
end.
1003.Boring count
这道题看了数据范围就知道要O(n)的算法,因为O(nlogn)的算法有点不大科学。。。
于是我来统计以每个字符s[j]为结尾的满足要求的字符串的个数,不妨设suff[i, j]表示s[i]到s[j]的子串。
又很明显如果suff[i, j]不满足条件了,则suff[i - 1, j]也不满足条件,若令f[j]表示以字符s[j]结尾的最左边满足条件的位置,则f[j]关于j是单调增的。
于是每次枚举j然后查找f[j], ans += j - f[j] +1即可。
var
i, x, k, len, left, t1 : longint;
first, next, num, last : array[..] of longint;
s : ansistring;
T : longint;
ans : int64; begin
readln(T);
while T > do begin
dec(T);
ans := ;
readln(s);
readln(k);
len := length(s);
left := ;
fillchar(first, sizeof(first), );
fillchar(last, sizeof(last), );
fillchar(num, sizeof(num), ); for i := to len do begin
x := ord(s[i]);
if first[x] = then first[x] := i;
inc(num[x]);
next[last[x]] := i;
last[x] := i;
if num[x] > k then begin
dec(num[x]);
t1 := first[x];
first[x] := next[first[x]];
if t1 > left then left := t1;
end;
inc(ans, i - left);
end;
writeln(ans);
end;
end.
1004.Argestes and Sequence
看我来直播作死:
2014/9/28 22:17 1004在线BIT交到现在都是MLE,于是我把它删了,发誓明天一定要写出离线算法!
2014/9/28 22:51 1004在我无数的WA之后终于A掉了!

这道题一开始我想到的是线段树,后来发现是求段和于是树状数组(BIT)就可以搞定啦。
但是发现会无限MLE,于是需要一些奇怪的技巧:离线做。
因此我们做10次每次做一位即可。
于是我们现在只考虑某一位上的数如何行统计:
令a[i][j]表示前i个数中j出现的次数。于是操作是单点修改和求前缀和,明显拿BIT维护。
其实还可以分开0到9都做一次,这时候只要700k+(标程)的空间。但是给了3WK的空间就要用满嘛。。。
var
ch : char;
t : longint;
n, m, i, j, di : longint;
bit : array[.., ..] of longint;
opt, l, r, d, p, x, a, b, c, ans : array[..] of longint; function lowbit(x : longint) : longint;
begin
lowbit := x and (-x);
end; procedure add(x, y, del : longint);
begin
while x <= n do begin
inc(bit[x, y], del);
inc(x, lowbit(x));
end;
end; function query(x, y : longint) : longint;
var
res : longint; begin
res := ;
if x <> then
while x > do begin
inc(res, bit[x, y]);
dec(x, lowbit(x));
end;
query := res;
end; procedure main;
begin
readln(n, m);
for i := to n do
read(a[i]);
readln;
for i := to m do begin
read(ch);
if ch = 'Q' then begin
opt[i] := ;
readln(l[i], r[i], d[i], p[i]);
end else begin
opt[i] := ;
readln(x[i], b[i]);
end;
end; for di := to do begin
fillchar(bit, sizeof(bit), );
c := a;
for i := to n do begin
add(i, a[i] mod , );
a[i] := a[i] div ;
end;
for i := to m do begin
if (opt[i] = ) then begin
add(x[i], c[x[i]] mod , -);
add(x[i], b[i] mod , );
c[x[i]] := b[i];
b[i] := b[i] div ;
end else
if d[i] = di then
ans[i] := query(r[i], p[i]) - query(l[i] - , p[i]);
end;
end;
for i := to m do
if opt[i] = then writeln(ans[i]);
end; begin
readln(t);
while t > do begin
dec(t);
main;
end;
end.
BestCoder Round #11 题解集合的更多相关文章
- BestCoder Round #11 (Div. 2) 题解
HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- BestCoder Round #11 (Div. 2) 前三题题解
题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...
- BestCoder Round #60 题解链接
题解 题目 1001 GT and sequence 注意先特判000的情况:如果读入的数据有000,那么去掉所有的000且最后答案和000取一个max. 剩下的正数显然全部乘起来比较优. 对于负数 ...
- BestCoder Round #11 (Div. 2)
太菜,仅仅能去Div2.(都做不完 ORZ... 各自是 HDU: 5054pid=5054"> Alice and Bob 5055Bob and math problem 5056 ...
- 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 #90 A+B题解!
BestCoder Round #90 A Kblack loves flag 题意有点迷不造思路很简单但不造怎么求随机数,纠结了一会后直接粘上题目所给的代码稍加修改A了. const int _K ...
- Codeforces Global Round 11 个人题解(B题)
Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...
- BestCoder Round #68 (div.2) tree(hdu 5606)
tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
随机推荐
- Verify an App Store Transaction Receipt 【苹果服务端 验证一个应用程序商店交易收据有效性】
转自:http://blog.csdn.net/saindy5828/article/details/6414014 1. 从Transaction 的TransactionReceipt属性中得到接 ...
- hdu 5587 规律
题意:开始序列{1}; 一次变换{1,1,2}: 两次变换{1,1,2,1,2,2,3} ... 求s[n];题解:打表 S1,S2,S4,S8,S16,S32......公式 S[n]=S[最近的比 ...
- 关于line box,inline box,line-height,vertical-align之间的关系
1.content area 围绕着文字的一种box,高度由font-size和font-family决定.在chrome控制器里,你用鼠标志向某个内敛元素,显示的高度值. 2.inline box的 ...
- web 模板 类似京东左侧的导航栏
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- E2 2014.07.01 更新日志
增加功能 完善功能 电话报修单,添加可以发短信通知客户和技术员选项 商品历程分析,增加按商品分类条件统计 修件库,增加可以按维修商条件过滤,以方便查询某维修商的返修件 维修中,备件转销售时,自动读 ...
- HTML5探索之datalist研究
最近一个项目需要用到类似淘宝,百度搜索时的自动检索方案.自然想到了使用datalist标签.但是遇到一个bug,经过两天研究.小有结果给大家分享下~~ 首先看bug吧!~ 因为项目最开始测试就是用36 ...
- poj1375Intervals(点到圆的切线)
链接 貌似这样的叫解析几何 重点如何求得过光源到圆的切线与地板的交点x坐标,可以通过角度及距离来算,如图, 根据距离和半径可以求得角度a.b.r,自然也可以求得d1,d2. 至于方向问题,在求r得时候 ...
- Javascript中typeof instanceof constructor的区别
typeof typeof,是一个运算符,运算中需要一个操作数,运算的结果就是这个操作数的类型,运算的结果是一个字符串.他有一定的局限性,对于对象类型的值,只能得到一个object结果,却不能精确得到 ...
- linux查看文件夹大小
du -sh 查看当前文件夹大小 du -sh * | sort -n 统计当前文件夹(目录)/文件的大小,并按文件大小排序 ------------------------------------- ...
- 图形处理的api
[1]旋转 public class MainActivity extends Activity { private float degrees;// 图片旋转的角度 @Override ...