Submission #1062305

# Submission time Handle Problem Language Result Execution time Memory
1062305 2024-08-17T02:48:06 Z nightfal Stations (IOI20_stations) C++17
13 / 100
627 ms 776 KB
#include <vector>
#include <iostream>
using namespace std;

template <typename T> void print(T elem) {cout << elem << " ";}
template <typename T> void print(vector<T> &v) {for(auto elem: v) print(elem); cout << endl;}
template <typename T> void print(vector<vector<T>> &v) {for(auto elem: v) print(elem); cout << endl;}

void makeG(vector<vector<int>> &g, vector<int> &u, vector<int> &v) {
	for(int i=0; i<u.size(); i++) {
		g[u[i]].push_back(v[i]);
		g[v[i]].push_back(u[i]);
	}
}
int decideSubtaskLabel(int n, int k, vector<vector<int>> &g, vector<int> &u, vector<int> &v) {
	int cnt = 0;
	for(int i=0; i<n; i++)
		if (g[i].size()>2) cnt++;
	if (cnt==0) return 1;

	bool subtask2 = true;
	for(int i=0; i<u.size(); i++)
		if (!(u[i]==i+1 && v[i]==i/2 || u[i]==i/2 && v[i]==i+1)) subtask2= false;
	if (subtask2) return 2;

	if (cnt==1) return 3;
}
void labelLine(int cnt, int node, vector<vector<int>> &g, vector<int> &labels) {
	while(labels[node]==-1) {
		labels[node] = cnt++;
		for(int elem: g[node])
			if (labels[elem]==-1) node = elem;
	}
	return;
}
void subtask1Label(int n, vector<vector<int>> &g, vector<int> &labels) {
	int node = 0;
	for(int i=0; i<n; i++)
		if(g[i].size()==1) node=i;

	labelLine(0,node,g,labels);
	// int cnt = 0;
	// while(labels[node]==-1) {
	// 	labels[node] = cnt++; 
	// 	for(int elem: g[node])
	// 		if(labels[elem]==-1) node = elem;
	// }
	return;
}
void subtask2Label(int n, vector<int> &labels) {
	for(int i=0; i<n; i++)
		labels[i] = i+1;
	return;
}
void subtask3Label(int n, int k, vector<vector<int>> &g, vector<int> &labels) {
	int root = 0;
	for(int i=0; i<n; i++)
		if(g[i].size() > 2) {root = i; break;}
	labels[root] = 1'000;
	for(int i=0; i<g[i].size(); i++)
		labelLine((i+1)*1'000+1,i,g,labels);
}
std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
	vector<vector<int>> g(n);
	makeG(g,u,v);
	// print(g);
	int subtask = decideSubtaskLabel(n,k,g,u,v);
	vector<int> labels(n,-1);
	switch(subtask) {
		case 1: subtask1Label(n,g,labels); return labels;
		case 2: subtask2Label(n,labels); return labels;
		case 3: subtask3Label(n,k,g,labels); return labels;
	}
}
int decideSubtaskFind(int s, int t, vector<int> &c) {
	if (s >= 1'000 && t >= 1'000) return 3;
	for(int i=0; i<c.size(); i++)
		if (c[i] < s-1 || c[i] > s+1) return 2;
	return 1;
}
int subtask1Find(int s, int t, vector<int> &c) {
	if (c.size()==1) return c[0];
	else return t<s? c[0]:c[1];
}
bool ancestor(int a, int b) {
	if (a==0) return true;
	while(b!=0) { if(a==b) return true; else b >>= 1; }
	return false;
}
int subtask2Find(int s, int t, vector<int> &c) {
	for(int i=c.size()-1; i>=0; i--)
		if(ancestor(c[i],t)) return c[i];
	return c[0];
}
int subtask3Find(int s, int t, vector<int> &c) {
	if (s==1'000) {
		for(int elem: c)
			if(t/1000==elem/1000) return elem;
	}
	else if (s/1000 == t/1000) {
		if(s < t) {
			for(int elem: c)
				if(elem > s) return elem;
		}
		else {
			for(int elem: c)
				if(elem < s) return elem;
		}
	}
	else {
			for(int elem: c)
				if(elem < s) return elem;
	}
}
int find_next_station(int s, int t, std::vector<int> c) {
	int subtask = decideSubtaskFind(s,t,c);
	switch(subtask) {
		case 1: return subtask1Find(s,t,c);
		case 2: return subtask2Find(s,t,c);
		case 3: return subtask3Find(s,t,c);
	}
	return c[0];
}

Compilation message

stations.cpp: In function 'void makeG(std::vector<std::vector<int> >&, std::vector<int>&, std::vector<int>&)':
stations.cpp:10:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 |  for(int i=0; i<u.size(); i++) {
      |               ~^~~~~~~~~
stations.cpp: In function 'int decideSubtaskLabel(int, int, std::vector<std::vector<int> >&, std::vector<int>&, std::vector<int>&)':
stations.cpp:22:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |  for(int i=0; i<u.size(); i++)
      |               ~^~~~~~~~~
stations.cpp:23:19: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   23 |   if (!(u[i]==i+1 && v[i]==i/2 || u[i]==i/2 && v[i]==i+1)) subtask2= false;
stations.cpp: In function 'void subtask3Label(int, int, std::vector<std::vector<int> >&, std::vector<int>&)':
stations.cpp:60:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |  for(int i=0; i<g[i].size(); i++)
      |               ~^~~~~~~~~~~~
stations.cpp: In function 'int decideSubtaskFind(int, int, std::vector<int>&)':
stations.cpp:77:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |  for(int i=0; i<c.size(); i++)
      |               ~^~~~~~~~~
stations.cpp: In function 'int decideSubtaskLabel(int, int, std::vector<std::vector<int> >&, std::vector<int>&, std::vector<int>&)':
stations.cpp:27:1: warning: control reaches end of non-void function [-Wreturn-type]
   27 | }
      | ^
stations.cpp: In function 'std::vector<int> label(int, int, std::vector<int>, std::vector<int>)':
stations.cpp:64:25: warning: control reaches end of non-void function [-Wreturn-type]
   64 |  vector<vector<int>> g(n);
      |                         ^
stations.cpp: In function 'int subtask3Find(int, int, std::vector<int>&)':
stations.cpp:114:1: warning: control reaches end of non-void function [-Wreturn-type]
  114 | }
      | ^
# Verdict Execution time Memory Grader output
1 Correct 341 ms 684 KB Output is correct
2 Correct 290 ms 684 KB Output is correct
3 Correct 607 ms 684 KB Output is correct
4 Correct 424 ms 684 KB Output is correct
5 Correct 387 ms 684 KB Output is correct
6 Correct 313 ms 684 KB Output is correct
7 Correct 316 ms 688 KB Output is correct
8 Correct 2 ms 764 KB Output is correct
9 Correct 1 ms 768 KB Output is correct
10 Correct 0 ms 768 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 295 ms 684 KB Output is correct
2 Correct 348 ms 684 KB Output is correct
3 Correct 605 ms 684 KB Output is correct
4 Correct 443 ms 684 KB Output is correct
5 Correct 434 ms 684 KB Output is correct
6 Correct 328 ms 684 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 336 ms 684 KB Output is correct
2 Correct 274 ms 684 KB Output is correct
3 Correct 595 ms 684 KB Output is correct
4 Correct 488 ms 684 KB Output is correct
5 Correct 444 ms 684 KB Output is correct
6 Correct 290 ms 684 KB Output is correct
7 Correct 297 ms 684 KB Output is correct
8 Correct 1 ms 776 KB Output is correct
9 Correct 1 ms 776 KB Output is correct
10 Correct 0 ms 776 KB Output is correct
11 Incorrect 1 ms 344 KB Invalid labels (values out of range). scenario=1, k=1000000, vertex=2, label=-1
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 619 ms 684 KB Output is correct
2 Correct 438 ms 684 KB Output is correct
3 Correct 394 ms 684 KB Output is correct
4 Correct 1 ms 768 KB Output is correct
5 Correct 1 ms 768 KB Output is correct
6 Correct 0 ms 768 KB Output is correct
7 Incorrect 0 ms 344 KB Invalid labels (values out of range). scenario=0, k=1000000000, vertex=2, label=-1
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 340 ms 684 KB Output is correct
2 Correct 307 ms 684 KB Output is correct
3 Correct 624 ms 684 KB Output is correct
4 Correct 443 ms 684 KB Output is correct
5 Correct 429 ms 684 KB Output is correct
6 Correct 283 ms 704 KB Output is correct
7 Correct 315 ms 684 KB Output is correct
8 Correct 2 ms 764 KB Output is correct
9 Correct 2 ms 768 KB Output is correct
10 Correct 0 ms 776 KB Output is correct
11 Correct 296 ms 684 KB Output is correct
12 Correct 365 ms 684 KB Output is correct
13 Correct 627 ms 684 KB Output is correct
14 Correct 467 ms 684 KB Output is correct
15 Correct 412 ms 684 KB Output is correct
16 Correct 299 ms 684 KB Output is correct
17 Incorrect 0 ms 344 KB Invalid labels (values out of range). scenario=0, k=1000000000, vertex=1, label=-1
18 Halted 0 ms 0 KB -