Loi_Vampire's Blog

自己选择的路,就算跪着也要走完

11/9
21:30
TEST

钟神的P73

P73

T1

题意:给定两个日期,求它们之间间隔了多少毫秒。

对于100%的数据,两个日期一定都是 21 世纪的某一天,且第二个日期一定 大于等于第一个日期。

当然是大力暴力啦!分别求出当前日期从2000-01-01 00:00:00开始一共过去了多少毫秒,然后输出差值就可以了。

 

T2

题意:n个人,m个位置,n个人按顺序打sif,每个人需要耗费一定的时间,问轮到第n+1个人打sif的时间。

n<=100000, m <= 50000.

这就是一个打水问题嘛,用优先队列搞一下就好了。

 

T3

题意:背包是个好东西,希望我也有。 给你一个二维的背包,它的体积是𝑁 × 𝑀。现在你有一些大小为1 × 2和1 ×3的物品,每个物品有自己的价值。你希望往背包里面装一些物品,使得它们的价值和最大,问最大的价值和是多少。

对于20%的数据,𝑁, 𝑀 ≤ 10, 𝑛1, 𝑛2≤ 100。 对于70%的数据,𝑁, 𝑀 ≤ 100, 𝑛1, 𝑛2≤ 2000。 对于100%的数据,1 ≤ 𝑇 ≤ 10,1 ≤ 𝑁, 𝑀 ≤ 500,0 ≤ 𝑛1, 𝑛2≤ 10000。

嗯……刚开始没有想到正解,但感觉一般情况下可以抽象成一个容量为n*m的背包,而两种物品的体积分别为2和3,这样就变成了01背包问题。但是因为memset的原因,tle了三个点……没有拿全40分 要不然就rank3了,哼唧

 

关于正解!是一个贪心……枚举1*3的物体放多少个即可得到正解。

当然,处理不是这么简单的。

一般情况下,13的物体最多可以放nm/3个;

而当背包的长或宽为2的时候,也就是说13的物体只能横着或竖着放。如果背包的宽为2,长为k3+2(k >= 0)的时候,13的物体最多可以放(nm-4)/ 3个

也就是

这样处理完就可以了,同时注意n1和n2可能不够的情况。

 

11/9
21:18
STL 数据结构

BZOJ 4320 ShangHai2006 Homework

Description

1:在人物集合 S 中加入一个新的程序员,其代号为 X,保证 X 在当前集合中不存在。 2:在当前的人物集合中询问程序员的mod Y 最小的值。 (为什么统计这个?因为拯救 过世界的人太多了,只能取模)

Input

第一行为用空格隔开的一个个正整数 N。 接下来有 N 行,若该行第一个字符为“A” ,则表示操作 1;若为“B”,表示操作 2; 其中 对于 100%的数据:N≤100000, 1≤X,Y≤300000,保证第二行为操作 1。

Output

对于操作 2,每行输出一个合法答案。

Sample Input

5
A 3
A 5
B 6
A 9
B 4

Sample Output

3
1

HINT

【样例说明】 在第三行的操作前,集合里有 3、5 两个代号,此时 mod 6 最小的值是 3 mod 6 = 3; 在第五行的操作前,集合里有 3、5、9,此时 mod 4 最小的值是 5 mod 4 = 1;

Source

 

对于小于logN的暴力,对于大于logN的每次查询kY(ky <= N)的后继 听说set会被卡,所以上了splay……总的时间复杂度O(n√nlogn)

不过,听说用并查集的思想可以优化为O(n√nα(n))的……

 

11/9
19:36
STL

openjudge 3344 冷血格斗场

描述

为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场。格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一名老会员打一场表演赛,证明自己的实力。我们假设格斗的实力可以用一个正整数表示,成为实力值,两人的实力值可以相同。另外,每个人都有一个唯一的id,也是一个正整数。为了使得比赛更好看,每一个新队员都会选择与他实力最为接近的人比赛,即比赛双方的实力值之差的绝对值越小越好,如果有多个人的实力值与他差别相同,则他会选择id最小的那个。

不幸的是,Facer一不小心把比赛记录弄丢了,但是他还保留着会员的注册记录。现在请你帮facer恢复比赛纪录,按照时间顺序依次输出每场比赛双方的id。

输入

第一行一个数n(0 < n <=100000),表示格斗场新来的会员数(不包括facer)。以后n行每一行两个数,按照入会的时间给出会员的id和实力值。一开始,facer就算是会员,id为1,实力值1000000000。 输出 N行,每行两个数,为每场比赛双方的id,新手的id写在前面。

样例输入

3
2 3
3 1
4 2

样例输出

2 1
3 2
4 2

某下午和兔子一起玩耍set&&map系列。

和热血格斗场相比,唯一的区别是每个人的实力值可能相同,所以就不能只用set了……可以用map来记录当前实力值的最小id,这样做正确性显然……

 

11/9
19:24
STL

openjudge 3343 热血格斗场

描述

为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家热血格斗场。格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一名老会员打一场表演赛,证明自己的实力。我们假设格斗的实力可以用一个正整数表示,成为实力值。另外,每个人都有一个唯一的id,也是一个正整数。为了使得比赛更好看,每一个新队员都会选择与他实力最为接近的人比赛,即比赛双方的实力值之差的绝对值越小越好,如果有两个人的实力值与他差别相同,则他会选择比他弱的那个(显然,虐人必被虐好)。

不幸的是,Facer一不小心把比赛记录弄丢了,但是他还保留着会员的注册记录。现在请你帮facer恢复比赛纪录,按照时间顺序依次输出每场比赛双方的id。

输入

第一行一个数n(0 < n <=100000),表示格斗场新来的会员数(不包括facer)。以后n行每一行两个数,按照入会的时间给出会员的id和实力值。一开始,facer就算是会员,id为1,实力值1000000000。输入保证两人的实力值不同。

输出

N行,每行两个数,为每场比赛双方的id,新手的id写在前面。

样例输入

3
2 1
3 3
4 2

样例输出

2 1
3 2
4 2

 

某下午和兔子一起玩耍set系列……用set插入,之后find一下,加加减减来找前驱,后继就好啦~