QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#244086#7687. Randias Permutation Taskucup-team2432#TL 3ms3496kbC++201.7kb2023-11-08 21:00:332023-11-08 21:00:33

Judging History

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

  • [2023-11-08 21:00:33]
  • 评测
  • 测评结果:TL
  • 用时:3ms
  • 内存:3496kb
  • [2023-11-08 21:00:33]
  • 提交

answer

#include<bits/stdc++.h>

using LL = long long;
const LL inf = 1e9;
const LL P = 998244353;
LL K = 1;

LL hash(const std::vector<int> &vec) {
	LL res = 0,unit = 1;
	int n = vec.size() - 1;
	for (int i = 0; i < n; ++i) {
		res = (res + unit * vec[i]) % P;
		unit = unit * K % P;
	}
	return res;
}

void solve() {

	std::mt19937 rnd(std::random_device{}());
	K = rnd() % P;
	K = std::max(K,10ll);

	int n,m;std::cin >> n >> m;
	std::vector pmt(m,std::vector<int>(n+1));
	for (int i = 0; i < m; ++i) {
		for (int j = 0; j < n; ++j) {
			std::cin >> pmt[i][j];
		}
	}
	std::map<LL,int> mp;
	std::priority_queue<std::pair<int,std::vector<int>>,std::vector<std::pair<int,std::vector<int>>>,std::greater<>> q;
	for (int i = 0; i < m; ++i) {
		LL ouo = rnd() % P;
		pmt[i][n] = ouo;
		q.emplace(i+1,pmt[i]);
	}
	while (!q.empty()) {
		auto [point,vec] = q.top();q.pop();
		LL hsh = hash(vec);
		mp[hsh] = 1;
		if (point == m) continue;
		q.emplace(point+1,vec);
//		for (int i = 0; i < n; ++i) {
//			std::cout << vec[i] << " ";
//		}
//		std::cout << '\n';
		for (int i = 0; i < n; ++i) {
			vec[i] = pmt[point][vec[i] - 1];
//			std::cout << vec[i] << " ";
		}
		vec[n] = rnd() % P;
//		std::cout << '\n';
//		std::cout << '\n';
		q.emplace(point+1,vec);
	}
	std::cout << mp.size();
}

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

//    clock_t st = clock();
//    std::cout << std::fixed << std::setprecision(12);

//    freopen("test.in", "r", stdin);
//    freopen("test.out", "w", stdout);

	int T = 1;
//	std::cin >> T;
	while (T --) {
		solve();
	}

//    std::cout << (double)(clock()-st)/CLOCKS_PER_SEC;

	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3496kb

input:

5 4
1 2 3 4 5
5 1 3 4 2
3 4 1 5 2
5 2 4 1 3

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 3ms
memory: 3420kb

input:

2 1
2 1

output:

1

result:

ok 1 number(s): "1"

Test #3:

score: -100
Time Limit Exceeded

input:

1 180
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
...

output:


result: