답안 #566343

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
566343 2022-05-22T09:02:15 Z sofapuden 고대 책들 (IOI17_books) C++14
12 / 100
1 ms 340 KB
#include "books.h"
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

ll minimum_walk(vector<int> p, int s) {
	ll su = 0;
	int mx = 0;
	int n = p.size();
	vector<int> vis(n,0);
	vector<int> cnt(n+1,0);
	ll ans = 0;
	int cn = 0;
	vector<vector<int>> gr(n+1);
	for(int i = 0; i < n; ++i){
		if(!vis[i]){
			cn++;
			while(!vis[i]){
				ans+=abs(i-p[i]);
				vis[i] = cn;
				cnt[cn]++;
				i = p[i];
			}
		}
	}
	int dif = 0;
	vector<int> cnt2(n+1,0);
	bool st = 0;
	int ls = 0;
	pair<int,int> inter;
	for(int i = 0; i < n; ++i){
		if(i == s)st = 1, mx = i;
		if(!cnt2[vis[i]]++)dif++;
		if(cnt2[vis[i]] == cnt[vis[i]])dif--;
		if(!dif){
			if(i >= s && ls <= s)inter = {ls,i};
			ls = i+1;
			ans+=2*st;
		}
		else mx = i+1, st = 1;
	}
	vector<pair<int,int>> segs(n+1,{n,0});
	for(int i = 0; i < n; ++i){
		segs[vis[i]].first = min(segs[vis[i]].first,i);
		segs[vis[i]].second = max(segs[vis[i]].second,i);
	}
	int l = s, r = s;
	queue<int> Q;
	Q.push(s);
	while(Q.size()){
		auto x = Q.front();
		Q.pop();
		for(int i = segs[vis[x]].first; i < l; ++i)Q.push(i);
		for(int i = r+1; i <= segs[vis[x]].second; ++i)Q.push(i);
		l = min(l,segs[vis[x]].first);
		r = max(r,segs[vis[x]].second);
	}
	ans-=2*(make_pair(l,r)!=segs[vis[s]]);
	return ans-2*(n-mx);
}

Compilation message

books.cpp: In function 'll minimum_walk(std::vector<int>, int)':
books.cpp:9:5: warning: unused variable 'su' [-Wunused-variable]
    9 |  ll su = 0;
      |     ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 296 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 296 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 296 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 296 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Incorrect 1 ms 340 KB 3rd lines differ - on the 1st token, expected: '338572', found: '338570'
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 296 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 296 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Incorrect 1 ms 340 KB 3rd lines differ - on the 1st token, expected: '338572', found: '338570'
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB 3rd lines differ - on the 1st token, expected: '3304', found: '2742'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 296 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 296 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Incorrect 1 ms 340 KB 3rd lines differ - on the 1st token, expected: '338572', found: '338570'
20 Halted 0 ms 0 KB -