问题 6432 --龙哥的蜗牛

6432: 龙哥的蜗牛★★★★

时间限制: 5 Sec  内存限制: 256 MB
提交: 14  解决: 4
[提交][状态][命题人:]

题目描述

龙哥的蜗牛们在爬树。树高为h米,每只蜗牛从0米高度开始爬。
每只蜗牛有两个属性a与b (a>b)。从第1天开始,每只蜗牛会以以下方式爬树:在白天,蜗牛向上爬a米;在晚上,蜗牛会休息,而它每晚会向下滑b米。如果在第n天,蜗牛首次到达第h米的高度(也就是树顶),它就会结束爬行,此时我们称此蜗牛花了n天来爬树。注意,在最后一天,只要蜗牛离树顶的高度不超过a米,它就不需要正好再向上爬a米。
起初,并不知道树高h,只知道h是一个正整数。接下来会发生以下两种类型的事件,事件件数总和为q。
事件1:有一只属性为a,b的蜗牛声称它花了n天来爬树。如果这条信息与之前的已知信息有冲突(即根据之前信息确定的树高范围与当前信息所确定的树高范围有冲突),则忽略该信息,否则采纳该信息。
事件2:有一只属性为a,b的蜗牛前来询问你它需要花几天来爬树。你只能根据当前已采纳的信息来推测答案。如果仅根据已有信息无法给出精确的答案,则回答−1。
现在请你按顺序处理所有事件。

输入

第一整数为T,表示有T (1≤T≤10000)组测试样例。
每组测试数据的第一行包含一个正整数q(1≤q≤200000),代表事件的数量。
对于接下来的q行,每行的第一个整数为1或2,代表事件的种类。
如果事件类型是1,则该行接下来的三个整数即为a,b,n (1≤a,b,n≤1e9,a>b);
果事件类型是2,那么该行接下来的两个整数即为a,b (1≤a,b≤1e9,a>b);
测试数据保证所有q之和不超过200000。

输出

对于每组测试数据,在同一行内输出q个由空格隔开的整数。整数的含义如下:
对于每个事件1,如果接纳该信息,则输出1;如果忽略该信息,则输出0;
对于每个事件2,输出一个整数,代表该蜗牛爬树所花费的天数。如果无法确定具体的答案,则输出−1。
样例输入
Copy
5
3
1 3 2 5
2 4 1
2 3 2
3
1 6 5 1
2 3 1
2 6 2
3
1 4 2 2
1 2 1 3
2 10 2
9
1 7 3 6
1 2 1 8
2 5 1
1 10 9 7
1 8 1 2
1 10 5 8
1 10 7 7
2 7 4
1 9 4 2
9
1 2 1 6
1 8 5 6
1 4 2 7
2 9 1
1 5 1 4
1 5 2 7
1 7 1 9
1 9 1 4
2 10 8
样例输出
Copy
1 2 5
1 -1 1
1 0 1
1 0 -1 0 0 0 1 8 0
1 0 0 1 0 0 0 0 1

提示

在第一个测试样例中,我们可以从第一条信息确定h=7,所有我们可以知道第二条蜗牛和第三条蜗牛各自需要2天和5天来爬树。
对于第一个样例中的第二只蜗牛,有:
在第1天的白天:这只蜗牛向上爬了4米,现在它在4米高处。
在第1天的晚上:这只蜗牛向下滑了1米,现在它在3米高处。
在第2天的白天:这只蜗牛向上爬了4米,现在它在7米高处(即爬到树顶)。

在第三个测试样例中,第二只蜗牛的信息与第一只蜗牛的信息有冲突,因为第二支蜗牛说它花了3天爬树,而它在前3天最多可以爬1+1+2=4米,而第一只蜗牛只需要花1天就能爬4米。

来源

 

[提交][状态]