#4360. Count Close Pairs

    ID: 4360 Type: Interactive 2000ms 1024MiB Tried: 0 Accepted: 0 Difficulty: 3 Uploaded By: Tags>普及/提高-交互题双指针单调性

Count Close Pairs

题目描述

本题是一道交互题(你的程序与评测程序通过标准输入输出进行对话)。

数轴上有点 1,2,,N1, 2, \ldots, N,它们按编号从左到右排列(即编号越大,位置越靠右)。

一开始你只知道整数 NN并不知道各个点的具体坐标

之后你可以向评测机提问,最多提问 2N\bm{2N}

  • 选择满足 1i<jN1 \le i < j \le N 的整数 i,ji, j,询问点 ii 与点 jj 的距离是否不超过 11

请输出距离不超过 11 的点对个数,即满足 1i<jN1 \le i < j \le N 且点 ii 与点 jj 距离不超过 11 的整数对 (i,j)(i, j) 的个数。

交互方式

首先,从标准输入读入表示点数的整数 NN

N

接下来,你可以按下面的格式向标准输出提问,最多 2N2N 次。其中 i,ji, j 必须满足 1i<jN1 \le i < j \le N

? i j

评测机会从标准输入返回下面两种回答之一:

  • Yes:点 ii 与点 jj 的距离不超过 11
  • No:点 ii 与点 jj 的距离大于 11

当你确定答案 XX 后,按下面的格式输出并立即结束程序

! X

注意事项

  • 每次输出后都要换行并 flush 标准输出(C++ 用 endlcout.flush(),否则可能被判 TLE)。
  • 交互过程中若输出了不合法的内容,或程序中途异常退出,评测结果不确定。
  • 输出答案后请立即结束程序,否则评测结果不确定。
  • 点的位置和答案在交互开始时就已经固定,不会随你的提问而改变。

交互示例

下面是 N=3N = 3、点 1,2,31, 2, 3 的坐标分别为 0,0.7,1.50, 0.7, 1.5 时的交互过程(坐标不会作为输入给你):

输入 输出 说明
3 给出 NN
? 1 2 询问点 1,21, 2 的距离是否 1\le 1
Yes 距离 0.710.7 \le 1,回答 Yes
? 1 3 询问点 1,31, 3
No 距离 1.5>11.5 > 1,回答 No
? 2 3 询问点 2,32, 3
Yes 距离 0.810.8 \le 1,回答 Yes
! 2 回答满足条件的点对数为 22

本次共提问 33 次,不超过 2N=62N = 6 次,且答案正确,因此判定为通过。

约束条件

  • 2N1032 \le N \le 10^3
  • NN 是整数