Press the Button
Time Limit: 1 Second Memory Limit: 131072 KB
BaoBao and DreamGrid are playing a game using a strange button. This button is attached to an LED light (the light is initially off), a counter and a timer and functions as follows:
-
When the button is pressed, the timer is set to seconds (no matter what the value of the timer is before the button is pressed), where is a given integer, and starts counting down;
-
When the button is pressed with the LED light off, the LED light will be lit up;
-
When the button is pressed with the LED light on, the value of the counter will be increased by 1;
-
When the timer counts down to 0, the LED light turns off.
During the game, BaoBao and DreamGrid will press the button periodically. If the current real time (that is to say, the time elapsed after the game starts, NOT the value of the timer) in seconds is an integer and is a multiple of a given integer , BaoBao will immediately press the button times; If the current time in seconds is an integer and is a multiple of another given integer , DreamGrid will immediately press the button times.
Note that
-
0 is a multiple of every integer;
-
Both BaoBao and DreamGrid are good at pressing the button, so it takes no time for them to finish pressing;
-
If BaoBao and DreamGrid are scheduled to press the button at the same second, DreamGrid will begin pressing the button times after BaoBao finishes pressing the button times.
The game starts at 0 second and ends after seconds (if the button will be pressed at seconds, the game will end after the button is pressed). What's the value of the counter when the game ends?
Input
There are multiple test cases. The first line of the input contains an integer (about 100), indicating the number of test cases. For each test case:
The first and only line contains six integers , , , , and (, ). Their meanings are described above.
Output
For each test case output one line containing one integer, indicating the value of the counter when the game ends.
Sample Input
2
8 2 5 1 2 18
10 2 5 1 2 10
Sample Output
6
4
Hint
We now explain the first sample test case.
-
At 0 second, the LED light is initially off. After BaoBao presses the button 2 times, the LED light turns on and the value of the counter changes to 1. The value of the timer is also set to 2.5 seconds. After DreamGrid presses the button 1 time, the value of the counter changes to 2.
-
At 2.5 seconds, the timer counts down to 0 and the LED light is off.
-
At 5 seconds, after DreamGrid presses the button 1 time, the LED light is on, and the value of the timer is set to 2.5 seconds.
-
At 7.5 seconds, the timer counts down to 0 and the LED light is off.
-
At 8 seconds, after BaoBao presses the button 2 times, the LED light is on, the value of the counter changes to 3, and the value of the timer is set to 2.5 seconds.
-
At 10 seconds, after DreamGrid presses the button 1 time, the value of the counter changes to 4, and the value of the timer is changed from 0.5 seconds to 2.5 seconds.
-
At 12.5 seconds, the timer counts down to 0 and the LED light is off.
-
At 15 seconds, after DreamGrid presses the button 1 time, the LED light is on, and the value of the timer is set to 2.5 seconds.
-
At 16 seconds, after BaoBao presses the button 2 times, the value of the counter changes to 6, and the value of the timer is changed from 1.5 seconds to 2.5 seconds.
-
At 18 seconds, the game ends.
/*
* @Author: GTUIF
* @Date: 2018-10-26 17:28:56
* @Last Modified by: GTUIF
* @Last Modified time: 2018-10-26 17:28:56
*/
#include<bits/stdc++.h>
using namespace std;
#define debug puts("-----")
#define pi (acos(-1.0))
#define eps (1e-8)
#define inf (1<<30)
typedef long long LL;
LL a, n, c, b, v, d, t;
set<LL> p, pr;
vector<LL> ve, vr;
LL gcd(LL a, LL b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
int T;
cin >> T;
while(T--)
{
scanf("%lld %lld %lld %lld %lld %lld", &a, &b, &c, &d, &v, &t);
LL res = a * c / gcd(a, c);
LL ans = (t / a) * b + (t / c) * d + b + d - 1;
p.clear();
ve.clear();
for(LL i = 0; i <= res; i += a)
p.insert(i);
for(LL i = 0; i <= res; i += c)
p.insert(i);
set<LL>::iterator it;
for(it = p.begin(); it != p.end(); it++)
{
LL m = *it;
ve.push_back(m);
}
LL sum = 0;
for(LL i = 1; i < ve.size(); i++)
if(ve[i] - ve[i - 1] > v + 0.5)
sum++;
ans -= (t / res) * sum;
// cout << ans << endl;
LL k = t % res;
for(LL i = 1; ve[i] <= k; i++)
{
if(ve[i] - ve[i - 1] > v + 0.5)
ans--;
}
// for(int i = 1; i < ve.size(); i++)
// cout << ve[i] << "---" << ans << endl;
printf("%lld\n", ans);
}
return 0;
}