Submission #399571

# Submission time Handle Problem Language Result Execution time Memory
399571 2021-05-06T06:25:31 Z galca MalnaRISC (COI21_malnarisc) C++14
40 / 100
1 ms 332 KB
#include <iostream>
#include <vector>
using namespace std;

int main() {
	int N;
	cin >> N;

	int n = N;
	while (n & (n - 1)) {
		n++;
	}

   vector<int> regs(n);
   for (int i=0; i<n; i++) {
	  regs[i] = i+1;
   }  

   vector<int> stage;
   vector<int> r1;
   vector<int> r2;

   int curr_stage = 0;

   for (int k = 2; k < (N + N - 1); k *= 2) {
	   for (int j = k / 2; j > 0; j /= 2) {
		   for (int i = 0; i < n; i++) {
			   int ip = i ^ j;
			   if (ip > i) {
				   int reg1, reg2;
				   if ((i ^ k) < i) {
					   reg1 = regs[i];
					   reg2 = regs[ip];
				   }
				   else {
					   reg1 = regs[ip];
					   reg2 = regs[i];
				   }
				   if (reg1 > N) {
					   int tmp = regs[i];
					   regs[i] = regs[ip];
					   regs[ip] = tmp;
				   }
				   else {
					   if (reg2 <= N) {
						   stage.push_back(curr_stage);
						   r1.push_back(reg2);
						   r2.push_back(reg1);
						   //cout << "CMPSWP R" << reg2 << " R" << reg1 << endl;
					   }
				   }
			   }
		   }
		   ++curr_stage;
	   }
   }
   
   cout << curr_stage << endl;
   curr_stage = 0;
   for (int i = 0; i < r1.size(); i++) {
	   if (stage[i] != curr_stage) {
		   cout << endl;
	   }
	   curr_stage = stage[i];
	   cout << "CMPSWP R" << r1[i] << " R" << r2[i] << " ";
   }
   return 0;
}

Compilation message

malnarisc.cpp: In function 'int main()':
malnarisc.cpp:60:22: 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 < r1.size(); i++) {
      |                    ~~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB not sorted
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB not sorted
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB not sorted
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 332 KB not sorted
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 332 KB not sorted
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 332 KB not sorted