#P11193. [COTS 2021] 虫 Kukac

    ID: 10514 Type: RemoteJudge 3000ms 500MiB Tried: 0 Accepted: 0 Difficulty: 5 Uploaded By: Tags>2021交互题Special JudgeO2优化CEOI(中欧)COCI(克罗地亚)

[COTS 2021] 虫 Kukac

题目背景

译自 Izborne Pripreme 2021 (Croatian IOI/CEOI Team Selection) D1T2。3s,0.5G\texttt{3s,0.5G}

众所周知,昆虫只对顺逆时针方向有感觉。

如果怀疑 SPJ 有误,请联系搬题人。SPJ 代码

题目描述

这是一道交互题。

二维平面上有一个 NN 个点的多边形 PP。注意 PP 不一定是凸的(它可以是凹包)。我们将多边形上的点依次编号为 1N1\sim N

此外,还有一个额外的点 00。试通过交互来确定它是否在 PP 内部。

保证多边形的线段不交。保证这 (N+1)(N+1) 个点两两不同。保证无三点共线。

定义:A,B,CA,B,C 逆时针排列当且仅当从 AA 看向 BB 时,CC 在直线 ABAB 左侧。如左图。

【实现细节】

交互开始前,需要读入一行两个整数 N,QN,Q,表示多边形点数,和允许的最大询问数。

接下来,你的程序通过标准输入输出流与交互库交互。以下是允许的询问:

  • ? a b c\texttt{? a b c}:询问点 a,b,ca,b,c 是否逆时针排列。必须保证 a,b,ca,b,c 两两不同,且 0a,b,cN0\le a,b,c\le N

    如果 a,b,ca,b,c 逆时针排列,回答为 11;否则回答为 00

确定答案后,按照以下格式回答:

  • ! x\texttt{! x}:如果 x=1x=1,则代表 00 号点在多边形内部;x=0x=0 代表 00 号点不在多边形内部。

每次输出后,别忘了刷新缓冲区。如:std::cout.flush()

输入格式

见【实现细节】。

输出格式

见【实现细节】。

5 125

1

1

0

0

? 1 2 3

? 0 4 1

? 2 5 4

? 0 1 5

! 0

提示

样例解释

数据范围

对于 100%100\% 的数据,保证 3N5003\le N\le 500

再次提醒,多边形不一定是凸的。保证多边形的线段不交。保证这 (N+1)(N+1) 个点两两不同。保证无三点共线。

子任务编号 NN\le Q=Q= 特殊性质 得分
1 1 50 50 N3 N^3 5 5
2 2 25 25
3 3 500 500 N2 N^2 15 15
4 4 4N 4N 25 25
5 5 2N 2N 30 30

特殊性质:PP 是凸的。