답안 #818911

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
818911 2023-08-10T07:16:05 Z LIF Data Transfer (IOI19_transfer) C++14
40 / 100
73 ms 2496 KB
#include "transfer.h"
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> get_attachment(vector<int> source)
{
	int ans = 0;
	n = source.size();
	int need = 0;
	int mul = 1;
	if(n == 63) need = 6;
	else need = 8;
	//cout<<n<<endl;
	//cout<<need<<endl;
	for(int i=0;i<source.size();i++)if(source[i] == 1)ans ^= (i+1);
	vector<int> temp;
	for(int i=0;i<need;i++)temp.push_back(0);
	int nowbit = 0;
	//cout<<ans<<endl;
	while(ans > 0)
	{
		if(ans %2 == 0)temp[nowbit] = 0;
		else temp[nowbit] = 1;
		nowbit++;
		ans /= 2;
	}
	int kk = 0;
	vector<int> add;
	/*for(int i=temp.size()-1;i>=0;i--)cout<<temp[i]<<" ";
	cout<<endl;*/
	for(int i=temp.size()-1;i>=0;i--)add.push_back(temp[i]);
	for(int i=0;i<add.size();i++)kk ^= add[i];
	add.push_back(kk);
	/*for(int i=0;i<add.size();i++)cout<<add[i]<<" ";
	cout<<endl;*/
	/*for(int i=0;i<source.size();i++)cout<<source[i]<<" ";
	cout<<endl;*/
	return add;
}
vector<int> retrieve(vector<int> data)
{
	/*cout<<data.size()<<endl;
	cout<<"data: ";*/
/*	for(int i=n;i<data.size();i++)cout<<data[i];
	cout<<endl;*/
	int temp = 0;
	int n;
	if(data.size() == 71) n = 63;
	else n = 255;
	for(int i=n;i<data.size()-1;i++)temp ^= data[i];
	if(temp == data[data.size()-1]) // the part of ans1 has been changed.
	{
		int suxor = 0;
		int nowbit = 1;
		for(int i=data.size()-2;i>=n;i--)
		{
			if(data[i] == 1)suxor += nowbit;
			nowbit *= 2;
		}
	//	cout<<suxor<<endl;
		int temp2 = 0;
		for(int i=0;i<n;i++)if(data[i] == 1)temp2 ^= (i+1);
		if(suxor == temp2)
		{
			vector<int> ans;
			ans.clear();
			for(int i=0;i<n;i++)ans.push_back(data[i]);
			return ans;
		}
		else
		{
			int change = (suxor^temp2);
			data[change-1] ^=1;
			vector<int> ans;
			ans.clear();
			for(int i=0;i<n;i++)ans.push_back(data[i]);
			return ans;
		}
	}
	else
	{
		vector<int> ans;
		ans.clear();
		for(int i=0;i<n;i++)ans.push_back(data[i]);
		return ans;
	}
}

Compilation message

transfer.cpp: In function 'std::vector<int> get_attachment(std::vector<int>)':
transfer.cpp:15:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |  for(int i=0;i<source.size();i++)if(source[i] == 1)ans ^= (i+1);
      |              ~^~~~~~~~~~~~~~
transfer.cpp:32:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |  for(int i=0;i<add.size();i++)kk ^= add[i];
      |              ~^~~~~~~~~~~
transfer.cpp:10:6: warning: unused variable 'mul' [-Wunused-variable]
   10 |  int mul = 1;
      |      ^~~
transfer.cpp: In function 'std::vector<int> retrieve(std::vector<int>)':
transfer.cpp:50:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |  for(int i=n;i<data.size()-1;i++)temp ^= data[i];
      |              ~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 692 KB WA in grader: wrong source retrieval
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 59 ms 2492 KB Output is correct
2 Correct 72 ms 2436 KB Output is correct
3 Correct 61 ms 2484 KB Output is correct
4 Correct 64 ms 2496 KB Output is correct
5 Correct 64 ms 2492 KB Output is correct
6 Correct 73 ms 2492 KB Output is correct
7 Correct 69 ms 2496 KB Output is correct
8 Correct 59 ms 2484 KB Output is correct
9 Correct 59 ms 2492 KB Output is correct
10 Correct 58 ms 2492 KB Output is correct
11 Correct 59 ms 2492 KB Output is correct
12 Correct 60 ms 2484 KB Output is correct
13 Correct 58 ms 2484 KB Output is correct
14 Correct 61 ms 2488 KB Output is correct
15 Correct 66 ms 2484 KB Output is correct
16 Correct 60 ms 2492 KB Output is correct
17 Correct 60 ms 2492 KB Output is correct
18 Correct 67 ms 2492 KB Output is correct
19 Correct 60 ms 2496 KB Output is correct