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
AC × 30
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