Codeforces 1254C/1255F Point Ordering (交互题)
题目链接
http://codeforces.com/contest/1254/problem/C
题解
sb题。
第一次,通过\((n-2)\)次询问2确定\(p[2]\),也就是从\(1\)来看“最逆时针”的点。
第二次,通过\((n-2)\)次询问1确定每个点与\(a_1a_{p_2}\)这条直线的距离,并将所有点按该值排序。设排序后的数组是\(s_3,s_4,...\).
第三次,通过\((n-3)\)次询问2将所有点定序。我们实际上就是要将\((n-2)\)个点分成两组,一组从前往后,一组从后往前。每次询问2 1 s[i] s[i+1], 若答案为\(1\), 说明\(s_i\)是在第一组,否则在第二组。
时间复杂度\(O(n\log n)\), 总询问次数\((3n-7)\).
代码
#include<bits/stdc++.h>
#define pli pair<llong,int>
#define llong long long
using namespace std;
const int N = 1000;
int p[N+3]; pli s[N+3];
int n;
int main()
{
scanf("%d",&n);
p[1] = 1; p[2] = 2;
for(int i=3; i<=n; i++)
{
printf("2 %d %d %d\n",1,i,p[2]); fflush(stdout);
int x; scanf("%d",&x); if(x==1) {p[2] = i;}
}
for(int i=2; i<=n; i++)
{
if(i==p[2]) continue;
printf("1 %d %d %d\n",1,p[2],i); fflush(stdout);
scanf("%I64d",&s[i].first); s[i].second = i;
}
sort(s+2,s+n+1);
int tp1 = 2,tp2 = n+1;
for(int i=3; i<n; i++)
{
int u = s[i].second;
printf("2 %d %d %d\n",1,s[i].second,s[i+1].second); fflush(stdout);
int x; scanf("%d",&x);
if(x==-1) {p[--tp2] = s[i].second;}
else {p[++tp1] = s[i].second;}
}
p[++tp1] = s[n].second;
for(int i=0; i<=n; i++) printf("%d ",p[i]); fflush(stdout);
return 0;
}
Codeforces 1254C/1255F Point Ordering (交互题)的更多相关文章
- codeforces 1019B The hat 【交互题+二分搜索】
题目链接:戳这里 学习题解:戳这里
- Codeforces 1137D - Cooperative Game - [交互题+思维题]
题目链接:https://codeforces.com/contest/1137/problem/D 题意: 交互题. 给定如下一个有向图: 现在十个人各有一枚棋子(编号 $0 \sim 9$),在不 ...
- Codeforces Round #523 (Div. 2) F. Katya and Segments Sets (交互题+思维)
https://codeforces.com/contest/1061/problem/F 题意 假设存在一颗完全k叉树(n<=1e5),允许你进行最多(n*60)次询问,然后输出这棵树的根,每 ...
- Codeforces Round #371 (Div. 2) D. Searching Rectangles 交互题 二分
D. Searching Rectangles 题目连接: http://codeforces.com/contest/714/problem/D Description Filya just lea ...
- Codeforces Round #499 (Div. 2) D. Rocket_交互题_二分
第一次作交互题,有点不习惯. 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断. 对于判断是否实在说谎,用1判断即可.因为不可能有比1还小的数. 本题虽然非常 ...
- Codeforces Round #504 E - Down or Right 交互题
1023E 题意: 交互题.在一个有障碍地图中,问如何走才能从(1,1)走到(n,n),只能向右或者向左走.每次询问两个点,回复你这两个点能不能走通. 思路: 只用最多2*n-2次询问.从(1,1), ...
- Codeforces Round #525 (Div. 2) D. Ehab and another another xor problem(交互题 异或)
题目 题意: 0≤a,b<2^30, 最多猜62次. 交互题,题目设定好a,b的值,要你去猜.要你通过输入 c d : 如果 a^c < b^d ,会反馈 -1 : 如果 a^c = b^ ...
- Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)
人生第一次交互题ac! 其实比较水 容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数:否则是偶数. 所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点. ...
- E. XOR Guessing 交互题 Educational Codeforces Round 71 (Rated for Div. 2)
E. XOR Guessing 交互题. 因为这个数最多只有14位 0~13,所以我们可以先处理后面7位,然后再处理后面7位. 因为异或的性质,如果一个数和0异或,那么就等于本身. 所以我们第一次异或 ...
随机推荐
- 怎样获取响应头: Response Header
1. 使用 xhr.getResponseHeader()可以获取指定响应头字段值. function getHeaderTime() { console.log(this.getResponseHe ...
- 服务返回的json数据过大,nginx无法返回给client
现象:请求同样的服务器,N多个接口中,只有一个接口未返回:从日志看,请求已到后端服务,并返回 解决方案:配置nginx缓冲大小 ###Nginx的缓冲区的大小 proxy_buffer_size 5m ...
- Java门面模式(思维导图)
图1 门面模式[点击查看图片] 1,实体对象类 package com.cnblogs.mufasa.demo1; //3个子系统,解决问题的实体 public class StoreA { //示意 ...
- python+django学习二
所有模型类型的准备和迁移 在setting.py中添加:AUTH_USER_MODEL = 'users.UserProfile' 继承用户模板 确保子项目的url现在都是空的, 在pycharm的f ...
- CF336C-Vasily the Bear and Sequence题解--贪心
题目链接 https://www.luogu.org/problemnew/show/CF336C 分析 一个比较妙的贪心 我们要让最后\(and\)起来的数被\(2^k\)整除且\(k\)最大,我们 ...
- 前端 vue/react 或者 js 导入/导出 xlsx/xls (带样式)表格的功能
第一种导出表格的功能: yarn add xlsx script-loader file-saver xlsx-style 效果展示 xlsx-style的bug修复:node_module/xlsx ...
- elementui-插槽
<el-table-column label="操作"> <template slot-scope="scope"> <el-bu ...
- shiro系列一、认识shiro
Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大 ...
- 03_Hive的交互方式
之前使用的Shell方式只是Hive交互方式中的一种,还有一种就是将Hive启动为服务运行在一个节点上,那么剩下的节点 就可以使用客户端来连接它,从而也可以使用Hive的数据分析服务 1.Hive的交 ...
- python错误大全
1.NameError:name 'Ture' is not defined 这个是名字没有定义,也可能写错了 while True: 2.IndentationError: unindent doe ...