• 1254C


    交互

    问题就是如何确定点的顺序

    只有一个点肯定不行 需要除$1$号点找一个基准点 也就是和$1$号点相邻的点 这个可以通过$n$次叉积问出来

    然后就是确定顺序 通过叉积确定比较困难 因为一次只能问出来两个点的相对顺序 这样需要$n^2$次

    考虑面积询问 可以通过面积询问确定 其他点到两点连线距离 凸包上的点的距离先增加后减少 这样通过$n$次距离询问就可以确定顺序了

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int n;
    ll ask(int t, int i, int j, int k) {
        cout << t << " " << i << " " << j << " " << k << endl;
        ll ret;
        cin >> ret;
        return ret;
    }
    int main() {
        cin >> n;
        int piv = 2;
        for(int i = 3; i <= n; ++i) {
            if(ask(2, 1, piv, i) == -1) {
                piv = i;
            }
        }
        vector<pair<ll, int> > vec;
        for(int i = 2; i <= n; ++i) {
            if(i != piv) {
                vec.emplace_back(ask(1, 1, piv, i), i);
            }
        }
        sort(vec.begin(), vec.end());
        reverse(vec.begin(), vec.end());
        int far = vec[0].second;
        deque<int> q;
        q.push_back(far);
        for(int i = 1; i < vec.size(); ++i) {
            if(ask(2, 1, far, vec[i].second) == -1) {
                q.push_front(vec[i].second);
            } else {
                q.push_back(vec[i].second);
            }
        } 
        q.push_front(piv);
        q.push_front(1);
        cout << "0";
        for(auto x : q) {
            cout << " " << x;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Qt 4.x调试器问题,缺失调试助手。
    Qt 如何判断文件是不是一个目录
    Qt 5.7设置调试器
    Qt 无法解析外部文件2001,2019之类的
    TCP/UDP socket
    Qt 5.7 版本+2013VS环境配置
    骑行、318总结心得啊经验什么的
    蓝牙硬件交互数据传输Demo
    iOS蓝牙开发总结-4
    iOS蓝牙传输数据演示-3
  • 原文地址:https://www.cnblogs.com/19992147orz/p/12237283.html
Copyright © 2020-2023  润新知