QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#638663#7111. Press the ButtonDelovRE 0ms3540kbC++172.6kb2024-10-13 16:34:052024-10-13 16:34:05

Judging History

你现在查看的是最新测评结果

  • [2024-10-13 16:34:05]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:3540kb
  • [2024-10-13 16:34:05]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define lep(i, l, r) for(int i = (l); i <= (r); i ++)
#define rep(i, l, r) for(int i = (l); i >= (r); i --)

using i64 = long long;

const int N = 1e5 + 5;

int _case;

void solve() {
	++ _case;
	cerr << _case << endl;
	int a, b, c, d, v, t;
	cin >> a >> b >> c >> d >> v >> t;
	
	auto brute = [&] () -> int {
		int ans = b + d - 1;
		int nowa = 0, nowc = 0, lst = 0, nowpos = 0;
		while (1) {
			int nxa = nowa + a;
			int nxc = nowc + c;
			int pa = 0, pc = 0;
			
			nowpos = min (nxa, nxc);
			
			if (nowpos > t) break;
			
			if (nowpos == nxa) nowa += a, pa = 1;
			if (nowpos == nxc) nowc += c, pc = 1;
			
			ans += pa * b + pc * d;
			
			int len = nowpos - lst;
			if (len > v) -- ans;
			
			lst = nowpos; 
			
		//	cerr << nowpos << endl;
		}
		
		return ans;
	} ;
	
	//cout << brute() << endl;
	//return ;
	
	if (a * c > t) { // solver for [0, t] (a * c > t)
		cout << brute() << '\n';
		return ;
	}
	
	else {
		// solver for [0, a * c - 1] (a * c > t)
		int ans = b + d - 1;
		int nowa = 0, nowc = 0, lst = 0, nowpos = 0, lstlen = 0;
		while (1) {
			int nxa = nowa + a;
			int nxc = nowc + c;
			int pa = 0, pc = 0;
			
			nowpos = min (nxa, nxc);
			
			if (nowpos == a * c) break;
			
			if (nowpos == nxa) nowa += a, pa = 1;
			if (nowpos == nxc) nowc += c, pc = 1;
			
			ans += pa * b + pc * d;
			
			int len = nowpos - lst;
			if (len > v) -- ans;
			
			lstlen = len;
			
			lst = nowpos; 
			
		}

		int block_ans = ans;
		int blocks = t / (a * c);
		ans = block_ans * blocks;
		
		//cerr << blocks << endl;
		
		//cerr << lstlen << endl;
				
		if (lstlen <= v) {
			ans += blocks - 1;
		}
		
		nowa = nowc = blocks * a * c;
		lst = nowpos = nowa;
		
		
		if (lstlen > v) ans --;
		
		//t = nowpos - 1;
		
		//cerr << brute() << endl;
		//cerr << ans << ' ' << nowpos << endl;
		
		//return ;
		ans += b + d;
		
		
		while (1) {
			int nxa = nowa + a;
			int nxc = nowc + c;
			int pa = 0, pc = 0;
			
			nowpos = min (nxa, nxc);
			
			if (nowpos > t) break;
			
			if (nowpos == nxa) nowa += a, pa = 1;
			if (nowpos == nxc) nowc += c, pc = 1;
			
			ans += pa * b + pc * d;
			
			int len = nowpos - lst;
			if (len > v) -- ans;
			
			lstlen = len;
			
			lst = nowpos; 
			
		}
		
		cout << ans << '\n';
		cerr << ans << ' ' << brute() << '\n';
		assert (ans == brute());
		return ;
	}
	assert (false);
}

signed main() {
	ios :: sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	int Case;
	cin >> Case;
	while (Case --) solve();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3540kb

input:

2
8 2 5 1 2 18
10 2 5 1 2 10

output:

6
4

result:

ok 2 number(s): "6 4"

Test #2:

score: -100
Runtime Error

input:

1000
8 6 2 6 3 17
1 6 1 1 1 30
5 4 8 8 1 31
7 6 10 3 6 12
9 1 4 4 3 38
3 3 5 8 1 8
9 1 5 2 3 18
6 10 10 8 2 40
9 6 9 10 3 9
2 5 1 10 10 39
7 7 1 2 4 19
8 10 8 6 7 36
2 9 1 1 7 17
1 2 3 5 6 14
8 8 8 7 1 46
6 9 3 9 4 6
10 8 1 7 10 18
7 1 7 10 3 50
1 10 2 1 5 1
5 8 4 9 7 44
9 2 5 4 7 42
9 1 2 1 1 20
5 ...

output:

71
216
52
16
38
22
7
102
30
499
60
75
98
54
84
44
148
80
20
179
45
4
463
139
57

result: