mirror of
https://git.sb/baoshuo/OI-codes.git
synced 2024-12-25 05:11:59 +00:00
parent
baf93c7cb5
commit
452deb9dc4
31
LibreOJ/6/6.cpp
Normal file
31
LibreOJ/6/6.cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#include "interaction.h"
|
||||||
|
#include <bits/stdc++.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int n;
|
||||||
|
vector<int> ans;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
n = get_num();
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
int l = 0, r = 1000000;
|
||||||
|
|
||||||
|
while (l <= r) {
|
||||||
|
int mid = (l + r) >> 1, feedback = guess(i, mid);
|
||||||
|
|
||||||
|
if (!feedback) {
|
||||||
|
ans.emplace_back(mid);
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
if (feedback > 0) {
|
||||||
|
r = mid - 1;
|
||||||
|
} else {
|
||||||
|
l = mid + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
submit(ans);
|
||||||
|
return 0;
|
||||||
|
}
|
27
LibreOJ/6/interaction.h
Normal file
27
LibreOJ/6/interaction.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
int get_num() {
|
||||||
|
std::cout << "get_num" << std::endl
|
||||||
|
<< std::flush;
|
||||||
|
int ret;
|
||||||
|
std::cin >> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int guess(int index, int x) {
|
||||||
|
std::cout << "guess " << index << " " << x << std::endl
|
||||||
|
<< std::flush;
|
||||||
|
int ret;
|
||||||
|
std::cin >> ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void submit(const std::vector<int>& result) {
|
||||||
|
std::cout << "submit ";
|
||||||
|
for (std::vector<int>::const_iterator iter = result.begin(); iter != result.end(); iter++) {
|
||||||
|
std::cout << *iter << " ";
|
||||||
|
}
|
||||||
|
std::cout << std::endl
|
||||||
|
<< std::flush;
|
||||||
|
}
|
71
LibreOJ/6/interactor.cpp
Normal file
71
LibreOJ/6/interactor.cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#include <cstdlib>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
std::ofstream score("score.txt");
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline void assert(const T& condition, const std::string& message) {
|
||||||
|
if (!condition) {
|
||||||
|
std::cerr << message << std::endl;
|
||||||
|
score << -1 << std::endl;
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::ifstream datin("input");
|
||||||
|
int n, nguess = 0;
|
||||||
|
datin >> n;
|
||||||
|
std::vector<int> nums(n);
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
datin >> nums[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
std::string cmd;
|
||||||
|
std::cin >> cmd;
|
||||||
|
if (cmd == "get_num") {
|
||||||
|
std::cout << n << std::endl
|
||||||
|
<< std::flush;
|
||||||
|
} else if (cmd == "guess") {
|
||||||
|
nguess++;
|
||||||
|
int index, val;
|
||||||
|
assert(std::cin >> index >> val, "Invalid `index` or `val` in `guess` command!");
|
||||||
|
assert(0 <= index && index < n, "`index` must in [0, n)!");
|
||||||
|
|
||||||
|
if (val < nums[index]) {
|
||||||
|
std::cout << -1 << std::endl
|
||||||
|
<< std::flush;
|
||||||
|
} else if (val > nums[index]) {
|
||||||
|
std::cout << 1 << std::endl
|
||||||
|
<< std::flush;
|
||||||
|
} else {
|
||||||
|
std::cout << 0 << std::endl
|
||||||
|
<< std::flush;
|
||||||
|
}
|
||||||
|
} else if (cmd == "submit") {
|
||||||
|
bool wrongAnswer = false;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
int x;
|
||||||
|
assert(std::cin >> x, "Can't read the " + std::to_string(i) + "-th number!");
|
||||||
|
|
||||||
|
if (x != nums[i] && !wrongAnswer) {
|
||||||
|
wrongAnswer = true;
|
||||||
|
std::cerr << "First differ on the " + std::to_string(i) + "-th number!" << std::endl;
|
||||||
|
score << 0 << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!wrongAnswer) {
|
||||||
|
score << std::max(std::min(100.0, (950.0 - ((double)nguess / n - 100.0)) / 950.0 * 100.0), 0.0) << std::endl;
|
||||||
|
std::cerr << "nguess = " + std::to_string(nguess) << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
} else {
|
||||||
|
assert(false, "Invalid command `" + cmd + "`!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user