Submission #374724
Source Code Expand
#ifndef KOMAKI_LOCAL
#define NDEBUG
#endif
#include <bits/stdc++.h>
#include <sys/time.h>
#include <unistd.h>
using namespace std;
#define i64 int64_t
#define rep(i, n) for(i64 i = 0; i < ((i64)(n)); ++i)
#define sz(v) ((i64)((v).size()))
#define bit(n) (((i64)1)<<((i64)(n)))
#define all(v) (v).begin(), (v).end()
std::string dbgDelim(int &i){ return (i++ == 0 ? "" : ", "); }
#define dbgEmbrace(exp) { int i = 0; os << "{"; { exp; } os << "}"; return os; }
template <class T> std::ostream& operator<<(std::ostream &os, std::vector<T> v);
template <class T> std::ostream& operator<<(std::ostream &os, std::set<T> v);
template <class T> std::ostream& operator<<(std::ostream &os, std::queue<T> q);
template <class T> std::ostream& operator<<(std::ostream &os, std::priority_queue<T> q);
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::pair<T, K> p);
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::map<T, K> mp);
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::unordered_map<T, K> mp);
template <int INDEX, class TUPLE> void dbgDeploy(std::ostream &os, TUPLE tuple){}
template <int INDEX, class TUPLE, class H, class ...Ts> void dbgDeploy(std::ostream &os, TUPLE t)
{ os << (INDEX == 0 ? "" : ", ") << get<INDEX>(t); dbgDeploy<INDEX + 1, TUPLE, Ts...>(os, t); }
template <class T, class K> void dbgDeploy(std::ostream &os, std::pair<T, K> p, std::string delim)
{ os << "(" << p.first << delim << p.second << ")"; }
template <class ...Ts> std::ostream& operator<<(std::ostream &os, std::tuple<Ts...> t)
{ os << "("; dbgDeploy<0, std::tuple<Ts...>, Ts...>(os, t); os << ")"; return os; }
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::pair<T, K> p)
{ dbgDeploy(os, p, ", "); return os; }
template <class T> std::ostream& operator<<(std::ostream &os, std::vector<T> v)
{ dbgEmbrace( for(T t: v){ os << dbgDelim(i) << t; }); }
template <class T> std::ostream& operator<<(std::ostream &os, std::set<T> s)
{ dbgEmbrace( for(T t: s){ os << dbgDelim(i) << t; }); }
template <class T> std::ostream& operator<<(std::ostream &os, std::queue<T> q)
{ dbgEmbrace( for(; q.size(); q.pop()){ os << dbgDelim(i) << q.front(); }); }
template <class T> std::ostream& operator<<(std::ostream &os, std::priority_queue<T> q)
{ dbgEmbrace( for(; q.size(); q.pop()){ os << dbgDelim(i) << q.top(); }); }
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::map<T, K> mp)
{ dbgEmbrace( for(auto p: mp){ os << dbgDelim(i); dbgDeploy(os, p, "->"); }); }
template <class T, class K> std::ostream& operator<<(std::ostream &os, std::unordered_map<T, K> mp)
{ dbgEmbrace( for(auto p: mp){ os << dbgDelim(i); dbgDeploy(os, p, "->"); }); }
#define DBG_OUT std::cerr
#define DBG_OVERLOAD(_1, _2, _3, _4, _5, _6, macro_name, ...) macro_name
#define DBG_LINE() { char s[99]; sprintf(s, "line:%3d | ", __LINE__); DBG_OUT << s; }
#define DBG_OUTPUT(v) { DBG_OUT << (#v) << "=" << (v); }
#define DBG1(v, ...) { DBG_OUTPUT(v); }
#define DBG2(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG1(__VA_ARGS__); }
#define DBG3(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG2(__VA_ARGS__); }
#define DBG4(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG3(__VA_ARGS__); }
#define DBG5(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG4(__VA_ARGS__); }
#define DBG6(v, ...) { DBG_OUTPUT(v); DBG_OUT << ", "; DBG5(__VA_ARGS__); }
#define DEBUG0() { DBG_LINE(); DBG_OUT << std::endl; }
#define DEBUG(...) \
{ \
DBG_LINE(); \
DBG_OVERLOAD(__VA_ARGS__, DBG6, DBG5, DBG4, DBG3, DBG2, DBG1)(__VA_ARGS__); \
DBG_OUT << std::endl; \
}
const i64 N = 1000;
double sins[N];
double coss[N];
const double PI = acos(-1);
inline double calcY(int x, int y, i64 angle_i)
{
return sins[angle_i] * x + coss[angle_i] * y;
}
vector<tuple<double, double>> hidden_answer;
double ask(i64 angle_i)
{
double y = 0;
for(auto tup: hidden_answer) y = max(y, calcY(get<0>(tup), get<1>(tup), angle_i));
return y;
}
int main()
{
vector<double> angles(N);
rep(i, N) angles[i] = (N - i) * 360.0 / N;
rep(i, N) sins[i] = sin(angles[i] / 180.0 * acos(-1));
rep(i, N) coss[i] = cos(angles[i] / 180.0 * acos(-1));
hidden_answer.push_back(make_tuple(0, 0));
hidden_answer.push_back(make_tuple(-150, -100));
hidden_answer.push_back(make_tuple(149, -1000));
bool debug = false;
vector<double> ys(N);
rep(i, N){
printf("? %.10lf\n", angles[i]);
fflush(stdout);
if(debug){
ys[i] = ask(i);
}else{
cin >> ys[i];
}
}
const int D = 1000;
const double EPS = 0.0001;
vector<tuple<i64, i64>> points(1, make_tuple(0, 0));
for(i64 i = 0; i + 1 < N; ++i){
double y = 0.0;
for(auto tup: points) y = max(y, calcY(get<0>(tup), get<1>(tup), i));
if(abs(y - ys[i]) < EPS) continue;
tuple<double, int, int> best(1e100, -1, -1);
for(int x = -D; x <= D; ++x){
for(int y = -D; y <= D; ++y){
double d = 0;
d = max(d, abs(calcY(x, y, i + 0) - ys[i + 0]));
d = max(d, abs(calcY(x, y, i + 1) - ys[i + 1]));
d = max(d, abs(calcY(x, y, i + 2) - ys[i + 2]));
best = min(best, make_tuple(d, x, y));
}
}
points.push_back(make_tuple(get<1>(best), get<2>(best)));
}
printf("! %d\n", (int)sz(points));
rep(i, sz(points)) printf("! %d %d\n", (int)get<0>(points[i]), (int)get<1>(points[i]));
fflush(stdout);
return 0;
}
Submission Info
Submission Time |
|
Task |
H - 回すだけ |
User |
Komaki |
Language |
C++11 (GCC 4.9.2) |
Score |
300 |
Code Size |
5807 Byte |
Status |
AC |
Exec Time |
388 ms |
Memory |
1296 KB |
Judge Result
Set Name |
All |
Score / Max Score |
300 / 300 |
Status |
|
Set Name |
Test Cases |
All |
scrambled_00.txt, scrambled_01.txt, scrambled_02.txt, scrambled_03.txt, scrambled_04.txt, scrambled_05.txt, scrambled_06.txt, scrambled_07.txt, scrambled_08.txt, scrambled_09.txt, scrambled_10.txt, scrambled_11.txt, scrambled_12.txt, scrambled_13.txt, scrambled_14.txt, scrambled_15.txt, scrambled_16.txt, scrambled_17.txt, scrambled_18.txt, scrambled_19.txt, scrambled_20.txt, scrambled_21.txt, scrambled_22.txt, scrambled_23.txt, scrambled_24.txt, scrambled_25.txt, scrambled_26.txt, scrambled_27.txt, scrambled_28.txt, scrambled_29.txt |
Case Name |
Status |
Exec Time |
Memory |
scrambled_00.txt |
AC |
181 ms |
1172 KB |
scrambled_01.txt |
AC |
181 ms |
1192 KB |
scrambled_02.txt |
AC |
146 ms |
1128 KB |
scrambled_03.txt |
AC |
183 ms |
1184 KB |
scrambled_04.txt |
AC |
351 ms |
1296 KB |
scrambled_05.txt |
AC |
388 ms |
1232 KB |
scrambled_06.txt |
AC |
180 ms |
1200 KB |
scrambled_07.txt |
AC |
183 ms |
1192 KB |
scrambled_08.txt |
AC |
187 ms |
1196 KB |
scrambled_09.txt |
AC |
351 ms |
1208 KB |
scrambled_10.txt |
AC |
316 ms |
1200 KB |
scrambled_11.txt |
AC |
185 ms |
1280 KB |
scrambled_12.txt |
AC |
317 ms |
1200 KB |
scrambled_13.txt |
AC |
319 ms |
1240 KB |
scrambled_14.txt |
AC |
147 ms |
1196 KB |
scrambled_15.txt |
AC |
316 ms |
1228 KB |
scrambled_16.txt |
AC |
388 ms |
1180 KB |
scrambled_17.txt |
AC |
150 ms |
1184 KB |
scrambled_18.txt |
AC |
215 ms |
1192 KB |
scrambled_19.txt |
AC |
181 ms |
1196 KB |
scrambled_20.txt |
AC |
282 ms |
1228 KB |
scrambled_21.txt |
AC |
149 ms |
1268 KB |
scrambled_22.txt |
AC |
321 ms |
1184 KB |
scrambled_23.txt |
AC |
227 ms |
1276 KB |
scrambled_24.txt |
AC |
354 ms |
1272 KB |
scrambled_25.txt |
AC |
257 ms |
1188 KB |
scrambled_26.txt |
AC |
255 ms |
1188 KB |
scrambled_27.txt |
AC |
158 ms |
1128 KB |
scrambled_28.txt |
AC |
288 ms |
1180 KB |
scrambled_29.txt |
AC |
388 ms |
1272 KB |