Select Git revision
-
Jiří Kalvoda authoredJiří Kalvoda authored
main.cpp 1.42 KiB
#include "main.h"
#include <random>
#include <algorithm>
#include <cassert>
#include <cstring>
#include <unistd.h>
#include <ctime>
#define verdict_add(a...) do{ int r = sprintf(verdict+verdict_len, a); assert(r>0); verdict_len += r;}while(false)
using namespace lib;
using namespace internal;
int main(int argc, char ** argv)
{
if(argc==2 && !strcmp(argv[1], "-v"))
{
printf("%d\n", VERSION);
return 0;
}
assert(argc>=3);
std::uniform_int_distribution<unsigned int> dist(0, 1000000000);
std::random_device urandom("/dev/urandom");
int n = atoi(argv[1]);
vector<int> in(2*n);
int seed = 0;
if('A' <= argv[2][0] and argv[2][0] <= 'Z')
{
assert(strlen(argv[2]) == 2*n);
fo(i, 2*n)
in[i] = argv[2][i] - 'A';
}
else
{
seed = argv[2][0]?atoi(argv[2]):dist(urandom);
srand(seed);
fo(i,n) in[i] = i;
fo(i,n) in[n+i] = i;
random_shuffle(in.begin(), in.end());
}
fflush(stdout);
int old_stdout = dup(1);
dup2(2, 1);
long long time_before = time(0);
auto out = solve(n, in, argc-3, argv+3);
long long time_after = time(0);
fflush(stdout);
dup2(old_stdout, 1);
char verdict[1000];
int verdict_len=0;
verdict_add("{\"_\":0");
format_args(verdict, verdict_len, argc-3, argv+3);
validate_and_format_verdict(n, in, out, verdict, verdict_len, argv[0], time_after-time_before);
verdict_add(", \"seed\": %d", seed);
verdict_add("},\n");
add_to_log_file(verdict);
print_data(n, in, out, verdict);
return 0;
}