답안 #965419

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
965419 2024-04-18T13:37:41 Z lovrot MalnaRISC (COI21_malnarisc) C++17
40 / 100
1 ms 604 KB
#include <cstdio> 
#include <cassert>
#include <vector>
#include <algorithm> 
#include <cstring>

#define X first
#define Y second
#define PB push_back
#define DEB 0

using namespace std; 

typedef long long ll;
typedef pair<int, int> pii; 

const int N = 110; 

int n, a[N]; 

namespace debug {
	void init() { for(int i = 0; i < n; ++i) { scanf("%d", a + i); } }
	void cmp(int x, int y) { if(a[x] > a[y]) { swap(a[x], a[y]); } }
	void check() { 
		bool ans = 1;
		for(int i = 1; i < n; ++i) { ans &= a[i] >= a[i - 1]; }
		printf("%s\n", ans ? "success" : "failure");
	}
}

struct state {	
	int lo, hi, d;
	state(int lo, int hi, int d) : lo(lo), hi(hi), d(d) {}
};

vector<vector<pii>> out;
vector<vector<state>> prl;

void thread() {
	int ind = (int) prl.size() - 1;
	prl.PB({}); 
	out.PB({});
	for(const state &s : prl[ind]) {
		int lo = s.lo, hi = s.hi, mi = (s.lo + s.hi) / 2;
		if(lo + 1 != hi && lo < n) {
			for(int i = mi; i < min(hi, n); ++i) {
				if(s.d == 0) { out[ind].PB({i - (min(hi, n) - mi), i}); }
				else { out[ind].PB({i, i - (mi - lo)}); }
			}
			prl[ind + 1].PB(state(lo, mi, s.d));
			prl[ind + 1].PB(state(mi, hi, s.d));
		}
	}
	
	if(!prl[ind + 1].empty()) { thread(); }
}

int BIO[N];

int main() {
	scanf("%d", &n);
	if(DEB) debug::init(); 

	prl.PB({}); 
	int cnt_emp = 0;
	for(int i = 2; 1; i <<= 1) {
		for(int j = 0, f = 0; j < n; j += i, f ^= 1) { prl.back().PB(state(j, j + i, f)); }
		thread();
		++cnt_emp;
		if(i >= n) break;
	}

	printf("%d\n", (int) out.size() - cnt_emp); 
	for(int i = 0; i < out.size(); ++i) {
		if(out[i].empty()) continue;
		memset(BIO, 0, sizeof(BIO));
		for(pii p : out[i]) { 
			printf("CMPSWP R%d R%d ", p.X + 1, p.Y + 1);
			assert(!BIO[p.X] && !BIO[p.Y]);
			BIO[p.X] = BIO[p.Y] = 1;
			if(DEB) { debug::cmp(p.X, p.Y); }
		}
		printf("\n");
	}
	if(DEB) debug::check();
	return 0;
}

Compilation message

malnarisc.cpp: In function 'int main()':
malnarisc.cpp:74:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |  for(int i = 0; i < out.size(); ++i) {
      |                 ~~^~~~~~~~~~~~
malnarisc.cpp: In function 'void debug::init()':
malnarisc.cpp:22:50: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |  void init() { for(int i = 0; i < n; ++i) { scanf("%d", a + i); } }
      |                                             ~~~~~^~~~~~~~~~~~~
malnarisc.cpp: In function 'int main()':
malnarisc.cpp:61:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |  scanf("%d", &n);
      |  ~~~~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB not sorted
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB not sorted
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB not sorted
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB not sorted
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB not sorted
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB not sorted
2 Halted 0 ms 0 KB -