Chocolate Bunny CodeForces - 1407C 思维
题意:
交互题
题目输入一个n,你需要输出一个满足要求的[1,n]的排列。
你可以最多询问2*n次来确定你要输出的排列·中每一个位置的值
每一次询问格式为“? a b”
它会回复你答案排列中第a个位置的元素取余于第b个位置的元素的值是多少
题解:
因为最后答案中每一个元素只会使用一次,那么你询问的va,vb肯定一个大一个小(v数组代表最后我们要输出的答案数组)
那么你用一个min(va,vb)%max(va,vb)==min(va,vb)
可以说两次询问可以确定一个元素的大小
那么就可以写代码了
代码:
int a[maxn];
void ask(int i,int j) {
cout << "?" << " " << i << " " << j << endl;
fflush(stdout);
}
int main() {
int n;cin >> n;
if(n == 1) {
cout << "! 1" << endl;
fflush(stdout);
exit(0);
}
int id = 0;
int x,y;
ask(1,2);
cin >> x;
ask(2,1);
cin >> y;
if(x > y) {
a[1] = x;
id = 1;
} else {
a[2] = y;
id = 2;
}
if(n == 2) {
if(id == 1) cout << "! " << a[1] << " " << (3 - a[1]) << endl;
else cout << "! " << (3 - a[2]) << " " << a[2] << endl;
fflush(stdout);
return 0;
}
if(id == 1) id = 2; else id = 1;
for(int i = 3;i <= n;++i) {
if(a[i] != 0) continue;
x = 0,y = 0;
ask(id,i);cin >> x;
ask(i,id);cin >> y;
if(x > y) {
a[id] = x;
id = i;
} else {
a[i] = y;
}
}
a[id] = n;
cout << "!";
for(int i = 1;i <= n;++i) {
cout << " " << a[i];
}
cout << endl;
fflush(stdout);
return 0;
}
Chocolate Bunny CodeForces - 1407C 思维的更多相关文章
- Codeforces Round #669 (Div. 2) C. Chocolate Bunny 题解(交互)
题目链接 题目大意 有一个长度为n的全排列,你可以询问2n次,要你经过这个2n次的询问后,求出这个全排列 询问定义为:输入"? i j"输出\(p_{i} mod p_{j}\) ...
- Codeforces Round #669 (Div. 2) C. Chocolate Bunny (交互,构造)
题意:有一个长度为\(n\)的隐藏序列,你最多可以询问\(2n\)次,每次可以询问\(i\)和\(j\)位置上\(p[i]\ mod\ p[j]\)的结果,询问的格式是\(?\ x\ y\),如果已经 ...
- Codeforces 424A (思维题)
Squats Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- Codeforces 1060E(思维+贡献法)
https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...
- Queue CodeForces - 353D (思维dp)
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...
- codeforces 1244C (思维 or 扩展欧几里得)
(点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...
- CodeForces - 417B (思维题)
Crash Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- CodeForces - 417A(思维题)
Elimination Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit ...
- CodeForces 625A 思维
题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶 在开始判断一次 a与b-c的关系 即两种方式喝酒的成本 如果a< ...
随机推荐
- TCP/IP协议栈在Linux内核中的运行时序分析
网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...
- Can't locate Time/HiRes.pm in @INC (@INC contains
Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/ ...
- 【Linux】CentOS8 初体验
一.部署CentOS8虚拟机 1.下载Centos8镜像 下载地址: https://www.centos.org/download/ 可以选择国内的下载源,比较快,这里推荐清华的和阿里的 2.下载完 ...
- bash shell数组使用总结
本文为原创博文,转发请注明原创链接:https://www.cnblogs.com/dingbj/p/10090583.html 数组的概念就不多说了,大家都懂! shell数组分为索引数组和关联数 ...
- C++ STL 优先队列 (priority_queue)
std::priority_queue <queue> 优先队列 优先队列是一种容器适配器,根据某些严格的弱排序标准,使其第一个元素始终包含的最大元素. 这种特性类似于堆,它可以在 ...
- new String("ab")到底创建了几个对象说明
new String("ab")到底创建了几个对象? 之前一直被这个问题困扰,网上一些描述的都不是很清楚,自己看了一些资料可算搞清楚了,那就在博客上记录一下吧! String st ...
- OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇
少废话,先上效果图 屏幕显示效果 全家福 一.基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二. ...
- windows中使用django时报错:A server error occurred. Please contact the administrator.
这是因为在视图函数中使用了get函数,获取了不存在的数据例如:数据库中不存在一条name为hello1的数据,使用如下语句访问message = Message.objects.get(name='h ...
- Linux安装MYSQL并部署主从复制集群
主节点部署 安装数据库 Ubuntu apt-get install mysql-server -y systemctl start mysql systemctl enabled mysql Cen ...
- Spring之 IOC&依赖注入
0x01.Spring 1什么是Spring Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的(解耦). 框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组 ...