Submission #1337974


Source Code Expand

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int N, L, T;
int pos1;
vector<int> X;
vector<char> W;
vector<int> P;
vector<int> ans;

void calcu_last_pos(void) {
	P.resize(N);
	for (int i = 0; i < N; ++i) {
		int pos = (W[i] == '+') ? X[i] + T : X[i] - T;
		pos %= L;
		if (pos < 0)
			pos += L;
		P[i] = pos;
		if (i == 0)
			pos1 = pos;
	}
}

int calcu_cross_count(void) {
	int cnt = 0;
	if (W[0] == '+') {
		for (int i = 1; i < N; ++i) {
			if (W[i] == '+')
				continue;
			int d = 2 * T - (X[i] - X[0]);
			if (d > 0) {
				++cnt;
				int k =  d / L;
				cnt += k;
			}
		}
	}
	else {
		for (int i = 1; i < N; ++i) {
			if (W[i] == '-')
				continue;
			int d = 2 * T + (X[i] - X[0]) - L;
			if (d > 0) {
				++cnt;
				int k = d / L;
				cnt += k;
			}
		}
	}
	return cnt;
}

void set_ans(int k, int m) {
	for (int i = 0; i < N; ++i) {
		ans[m - 1] = P[k];
		++k;
		if (k >= N)
			k = 0;
		++m;
		if (m > N)
			m = 1;
	}
}

void solve(void) {
	ans.resize(N, 0);
	for (int i = 0; i < N; ++i) {
		if (P[i] == pos1) {
			int num;
			int cnt;
			if (W[0] == '+') {
				cnt = calcu_cross_count();
				num = (1 + cnt) % N;
				if (num == 0)
					num = N;
				if (i < N - 1 && P[i] == P[i + 1])
					i += 1;
			}
			else {
				cnt = calcu_cross_count();
				num = (1 - cnt) % N;
				num += N;
				num %= N;
				if (num == 0)
					num = N;
				if (i < N - 1 && P[i] == P[i + 1] && (num - cnt == 1))
					i += 1;
			}
			set_ans(i, num);
			break;
		}
	}
}

int main(void) {
	cin >> N >> L >> T;
	X.resize(N);
	W.resize(N, '+');

	for (int i = 0; i < N; ++i) {
		int dir;
		cin >> X[i] >> dir;
		if (dir == 2)
			W[i] = '-';
	}

	calcu_last_pos();
	sort(P.begin(), P.end());
	solve();

	for (int i = 0; i < N; ++i)
		cout << ans[i] << '\n';
	return 0;
}

Submission Info

Submission Time
Task C - Ants on a Circle
User kbid005
Language C++14 (GCC 5.4.1)
Score 700
Code Size 1901 Byte
Status AC
Exec Time 87 ms
Memory 2432 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 2
AC × 20
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.txt, sample_01.txt, sample_02.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
subtask_1_01.txt AC 55 ms 1664 KB
subtask_1_02.txt AC 40 ms 1280 KB
subtask_1_03.txt AC 87 ms 2432 KB
subtask_1_04.txt AC 87 ms 2432 KB
subtask_1_05.txt AC 12 ms 512 KB
subtask_1_06.txt AC 17 ms 640 KB
subtask_1_07.txt AC 70 ms 2048 KB
subtask_1_08.txt AC 72 ms 2176 KB
subtask_1_09.txt AC 46 ms 1408 KB
subtask_1_10.txt AC 40 ms 1280 KB
subtask_1_11.txt AC 13 ms 512 KB
subtask_1_12.txt AC 76 ms 2176 KB
subtask_1_13.txt AC 56 ms 1664 KB
subtask_1_14.txt AC 51 ms 1536 KB
subtask_1_15.txt AC 1 ms 256 KB
subtask_1_16.txt AC 1 ms 256 KB