Pocket Money
(Money.pas/cpp/c)
Description
学校为了表彰tsoi的优异成绩,m个领导每人都决定给tsoi的一些人发一些小红包。
于是n个Tsoier排成一排,等待着收钱。不过由于各种原因,每个人最多只可以收一个红包,所以原因你懂的,每个人都会选择最大的那个红包收下- -。
Input
第一行两个整数n,m
接下来m行,每行三个整数l r c。即这个领导计划给第l至r个Tsoier价值为c的红包
Output
由于数据较大,为了减少输出所用的不必要的时间,请采取以下方法输出:假如a[i]为第i个Tsoier最终收到的钱
ans := (ans * 1200007 + a[i]) mod 999911659;(1 i n)
Sample Input
3 2
1 2 1
2 2 2
Sample Output
146411103
Hint
30% n,m<=5000
50% n,m <= 10000
80% n,m <= 500000
100% n <= 1000000, m <= 2000000
本题时限为4s
第一反应是线段树维护最大值,然后——tle!!
发现题解是用堆来维护的,心都碎了有没有??
也就是把第i个人作为一个点与其修改相连,再用堆来维护(大根堆),然后=========就做完了!!!!!!而且是nlogn!!!!!!!!
好黑。。。。
Titanic
(Titanic.pas/cpp/c)
Background
Every night in my dreams
I see you, I feel you
That is how I know you go on.....
2012年4月,Titanic 3D版上映
一个世纪后,在2012的末日来临之前
让我们 一起回忆100年前一座梦幻之船的覆灭
Description
在Titanic撞上冰山之后,船长要给船上的n个人发救生衣,与数量可怜的救生艇不同,救生衣有无限个。从船长开始,每个拿到救生衣的人都会把救生衣穿上同时把救生衣分发给周围相邻没有救生衣的人,已知穿上救生衣需要Ts,分发给周围的所有人需要1s,船长的编号是p,请问至少要多久,才能保证每个人都能穿上救生衣呢?注意,第一秒,救生衣到了船长的手里
Input
第一行三个整数n,m,p
第二行一个整数T
接下来m行,每行2个整数,u v,表示u v 相邻
Output
一个整数ans,表示所有人都穿上救生衣需要的时间
Sample Input
4 5 1
2
1 3
1 2
1 4
2 3
3 4
Sample Output
4
Hint
50%的数据中, n ,m≤ 1000
100%的数据中,n ≤100000,m ≤ 1000000
1≤p,u,v≤n
本题后三点时限为2s
bfs,不说了,最深节点+t就是结果
Old Problem
(toooooold.pas/cpp/c)
Background
你有没有曾经被一场噩梦吓醒
你有没有曾经真的被恶心过
就像,你做了一个梦,梦见你在考试
可是,醒来却发现,真的在考试
就像,你曾经梦过一个无限可怕的噩梦
而现在,你却发现,这不仅仅是个梦......
Description
每一个搞oi的人都曾经有一场噩梦,写这道题的时候,做梦都会吓醒。比如,这个。
所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子:
43#98650#45
+ 8468#6633
44445506978
其中#号代表被虫子啃掉的数字。根据算式,我们很容易判断:第一行的两个数字分别是5和3,第二行的数字是5。
现在,我们对问题做两个限制:
首先,我们只考虑加法的虫食算。这里的加法是N进制加法,算式中三个数都有N位,允许有前导的0。
其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。如果这个算式是N进制的,我们就取英文字母表午的前N个大写字母来表示这个算式中的0到N-1这N个不同的数字:但是这N个字母并不一定顺序地代表0到N-1)。输入数据保证N个字母分别至少出现一次。
BADC
+ CBDA
DCCC
上面的算式是一个4进制的算式。很显然,我们只要让ABCD分别代表0123,便可以让这个式子成立了。你的任务是,对于给定的N进制加法算式,求出N个不同的字母分别代表的数字,使得该加法算式成立。输入数据保证有且仅有一组解
Input
输入文件包含4行。第一行有一个正整数N(N<=26),后面的3行每行有一个由大写字母组成的字符串,分别代表两个加数以及和。这3个字符串左右两端都没有空格,从高位到低位,并且恰好有N位。
Output
输出文件alpha.out包含一行。在这一行中,应当包含唯一的那组解。解是这样表示的:输出N个数字,分别表示A,B,C……所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格。
Sample Input
5
ABCED
BDACE
EBBAA
Sample Output
1 0 3 4 2
Hint
对于30%的数据,保证有N<=10;
对于50%的数据,保证有N<=15;
对于全部的数据,保证有N<=26。
详见vijos1099,dfs+剪枝
喜欢就收藏一下,vic私人qq:1064864324,加我一起讨论问题,一起进步^-^