| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 931092 | boris_mihov | Ancient Machine (JOI21_ancient_machine) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "Anna.h"
#include <algorithm>
#include <iostream>
#include <cassert>
#include <vector>
typedef long long llong;
const int BUCKET_SIZE = 73;
const int MYLOG = 51;
llong fib[BUCKET_SIZE + 5];
struct FibbonacciConverter
{
std::string getString(std::string s)
{
while (s.size() % BUCKET_SIZE != 0)
{
s += '0';
}
std::string res;
for (int i = 0 ; i < s.size() ; i += BUCKET_SIZE)
{
llong currNum = 0;
for (int j = i ; j < i + BUCKET_SIZE ; ++j)
{
if (s[j] == '1') currNum += fib[j - i];
}
assert(currNum < (1LL << MYLOG));
for (int log = MYLOG - 1 ; log >= 0 ; --log)
{
if (currNum & (1LL << log))
{
res += '1';
} else
{
res += '0';
}
}
}
return res;
}
std::string fromString(std::string s)
{
assert(s.size() % MYLOG == 0);
std::string res;
for (int i = 0 ; i < s.size() ; i += MYLOG)
{
llong currNum = 0;
for (int j = i ; j < i + MYLOG ; ++j)
{
currNum *= 2;
if (s[j])
{
currNum++;
}
}
std::string toAdd;
for (int pos = BUCKET_SIZE ; pos > 0 ; --pos)
{
if (currNum >= fib[pos - 1])
{
toAdd += '1';
currNum -= fib[pos - 1];
} else
{
toAdd += '0';
}
}
std::reverse(toAdd.begin(), toAdd.end());
res += toAdd;
}
return res;
}
};
void Anna(int N, std::vector <char> s)
{
fib[0] = 1;
fib[1] = 2;
for (int i = 2 ; i < BUCKET_SIZE + 5 ; ++i)
{
fib[i] = fib[i - 1] + fib[i - 2];
}
bool foundX = false;
std::string toConvert;
for (int i = 0 ; i < N ; ++i)
{
if (!foundX && s[i] == 'X')
{
foundX = true;
// toConvert += '1';
Send(1);
i++;
} else if (foundX && s[i] == 'Z')
{
Send(1);
i++;
} else
{
Send(0);
}
}
}
#include "Anna.h"
#include <algorithm>
#include <iostream>
#include <cassert>
#include <vector>
typedef long long llong;
const int BUCKET_SIZE = 73;
const int MYLOG = 51;
llong fib[BUCKET_SIZE + 5];
struct FibbonacciConverter
{
std::string getString(std::string s)
{
while (s.size() % BUCKET_SIZE != 0)
{
s += '0';
}
std::string res;
for (int i = 0 ; i < s.size() ; i += BUCKET_SIZE)
{
llong currNum = 0;
for (int j = i ; j < i + BUCKET_SIZE ; ++j)
{
if (s[j] == '1') currNum += fib[j - i];
}
assert(currNum < (1LL << MYLOG));
for (int log = MYLOG - 1 ; log >= 0 ; --log)
{
if (currNum & (1LL << log))
{
res += '1';
} else
{
res += '0';
}
}
}
return res;
}
std::string fromString(std::string s)
{
assert(s.size() % MYLOG == 0);
std::string res;
for (int i = 0 ; i < s.size() ; i += MYLOG)
{
llong currNum = 0;
for (int j = i ; j < i + MYLOG ; ++j)
{
currNum *= 2;
if (s[j])
{
currNum++;
}
}
std::string toAdd;
for (int pos = BUCKET_SIZE ; pos > 0 ; --pos)
{
if (currNum >= fib[pos - 1])
{
toAdd += '1';
currNum -= fib[pos - 1];
} else
{
toAdd += '0';
}
}
std::reverse(toAdd.begin(), toAdd.end());
res += toAdd;
}
return res;
}
};
void Anna(int N, std::vector <char> s)
{
fib[0] = 1;
fib[1] = 2;
for (int i = 2 ; i < BUCKET_SIZE + 5 ; ++i)
{
fib[i] = fib[i - 1] + fib[i - 2];
}
bool foundX = false;
std::string toConvert;
for (int i = 0 ; i < N ; ++i)
{
if (!foundX && s[i] == 'X')
{
foundX = true;
// toConvert += '1';
Send(1);
i++;
} else if (foundX && s[i] == 'Z')
{
Send(1);
i++;
} else
{
Send(0);
}
}
}
