QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#645532#9220. Bus Analysisucup-team2432WA 120ms24136kbC++173.6kb2024-10-16 18:52:322024-10-16 18:52:33

Judging History

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

  • [2024-10-16 18:52:33]
  • 评测
  • 测评结果:WA
  • 用时:120ms
  • 内存:24136kb
  • [2024-10-16 18:52:32]
  • 提交

answer

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
#define ll long long
#define all(v) v.begin(),v.end()
#define sz(v) ((ll)v.size())
#define V vector
#define vi V<int>
#define vll V<ll>
#define eb emplace_back
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define A array
#define pb push_back
#define mset multiset
#define gpumap __gnu_pbds::gp_hash_table
#define ccumap __gnu_pbds::cc_hash_table
#define ui unsigned int
#define ull unsigned ll
#define i128 __int128
#define cerr if (test) cerr
#define freopen if (test) freopen
#define whtest if (test)
using namespace std;

constexpr int test = 0;

namespace jhsy {
	constexpr int B = 75,P = 1e9+7;
	struct Info {
		ll c{},s{};
		Info() {}
		Info(ll c,ll s):c(c),s(s) {}
		Info friend operator + (const Info &x,const Info &y) {
			return {(x.c+y.c)%P,(x.s+y.s)%P};
		}
		Info add(int k) const {
			return {c,s+k*c%P};
		}
	};
	void main() {
		int n;
		cin >> n;
		A<A<A<A<int,4>,B+1>,B+1>,B+1> p{};
		for (int x = 0; x <= B; x++) {
			for (int y = x; y <= B; y++) {
				for (int z = y; z <= B; z++) {
					vi f(B+1);
					for (int i = 0; i < x; i++) {
						f[i] = 0;
					}
					for (int i = x; i < y; i++) {
						f[i] = 1;
					}
					for (int i = y; i < z; i++) {
						f[i] = 2;
					}
					f[B] = min(f[B-20]+1,f[B-75]+3);
					p[x][y][z][3] = f[1];
					vi vec;
					for (int i = 1; i+1 <= B; i++) {
						if (f[i] != f[i+1]) {
							vec.eb(i-1);
						}
					}
					vec.resize(3,B);
					for (int i = 0; i < 3; i++) {
						p[x][y][z][i] = vec[i];
					}
				}
			}
		}
		A<A<A<Info,B+1>,B+1>,B+1> f{};
		f[B][B][B] = {1,0};
		auto mv = [&](int i, int j, int k, int x) -> A<int,4> {
			vi vec; int c = 0;
			if (i != B) {
				if (i >= x) {
					vec.eb(i-x);
				}
				else {
					c++;
				}
			}
			if (j != B) {
				if (j >= x) {
					vec.eb(j-x);
				}
				else {
					c++;
				}
			}
			if (k != B) {
				if (k >= x) {
					vec.eb(k-x);
				}
				else {
					c++;
				}
			}
			vec.resize(3,B);
			return {vec[0],vec[1],vec[2],c};
		};
		for (int o = 0,lst = 0; o < n; o++) {
			int cur;
			cin >> cur;
			int x = cur-lst;
			{
				decltype(f) g{};
				for (int i = 0; i <= B; i++) {
					for (int j = i; j <= B; j++) {
						for (int k = j; k <= B; k++) {
							auto [a,b,c,d] = mv(i, j, k, x - 1);
							g[a][b][c] = g[a][b][c]+f[i][j][k].add(d);
						}
					}
				}
				f = std::move(g);
			}
			{
				decltype(f) g{};
				for (int i = 0; i <= B; i++) {
					for (int j = 0; j <= B; j++) {
						for (int k = 0; k <= B; k++) {
							{
								auto [a,b,c,d] = mv(i, j, k, 1);
								g[a][b][c] = g[a][b][c]+f[i][j][k].add(d);
							}
							{
								auto [a,b,c,d] = p[i][j][k];
								g[a][b][c] = g[a][b][c]+f[i][j][k].add(d);
							}
						}
					}
				}
				f = std::move(g);
			}
			lst = cur;
		}
		ll ans = 0,cnt = 0;
		for (int i = 0; i <= B; i++) {
			for (int j = 0; j <= B; j++) {
				for (int k = 0; k <= B; k++) {
					auto [a,b,c,d] = mv(i, j, k, B);
					ans = (ans+f[i][j][k].add(d).s)%P;
					if (f[i][j][k].c) {
						cerr << i << ' ' << j << ' ' << k << ' ' << f[i][j][k].c << ' ' << f[i][j][k].add(d).s << '\n';
					}
				}
			}
		}
		ans = (2*ans)%P;
		cout << ans << '\n';
	}
}

int main() {
	freopen("test.in","r",stdin);
	freopen("test.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout << fixed << setprecision(20);

//	jhsy::init();

	int T = 1;
//	cin >> T;
	while (T--) {
		jhsy::main();
	}

	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 120ms
memory: 24136kb

input:

3
1 8 20

output:

18

result:

wrong answer 1st numbers differ - expected: '14', found: '18'